2つのテーブルがあります。1つは仕事の締め切り用、もう1つは仕事の説明用です。各ジョブはステータスを取ることができ、一部のステータスは、ジョブの期限を他のテーブルから削除する必要があることを意味します。
LEFT JOIN
を使用すると、簡単にSELECT
基準を満たすジョブ/期限を設定できます:
SELECT * FROM `deadline`
LEFT JOIN `job` ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'
(status
はjob
ではなくdeadline
テーブルに属しています)
しかし、deadline
からこれらの行を削除したい場合、MySQLはエラーをスローします。私のクエリは次のとおりです。
DELETE FROM `deadline`
LEFT JOIN `job`
ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'
MySQLエラーは何も言いません:
SQL構文にエラーがあります。 'LEFT JOIN
job
ON deadline.job_id = job.job_id WHEREstatus
=' szaml 'を1行目に使用する正しい構文については、MySQLサーバーバージョンに対応するマニュアルを確認
SELECT
を有効なDELETE
クエリに変換するにはどうすればよいですか?
DELETE
を適用するテーブルを指定するだけです。
deadline
行のみを削除します。
DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....
deadline
およびjob
行を削除します。
DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....
job
行のみを削除します。
DELETE `job` FROM `deadline` LEFT JOIN `job` ....
「table as」を使用している場合は、削除するように指定します。
例では、table_2に存在しないすべてのtable_1行を削除します。
DELETE t1 FROM `table_1` t1 LEFT JOIN `table_2` t2 ON t1.`id` = t2.`id` WHERE t2.`id` IS NULL
DELETE FROM deadline where ID IN (
SELECT d.ID FROM `deadline` d LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` = 'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `status` = 'szallitva' OR `status` = 'storno');
この種のサブクエリがMySQLで機能するかどうかはわかりませんが、試してみてください。期限表にID列があると仮定しています。
これを試して:
DELETE `deadline`
FROM `deadline`
INNER JOIN `job` ON `deadline`.`job_id` = `job`.`id`
WHERE `job`.`id` = 123
MySQLでは、DELETEステートメントでINNER JOIN句を使用して、テーブルの行と別のテーブルの一致する行を削除できます。
たとえば、指定された条件を満たすT1テーブルとT2テーブルの両方から行を削除するには、次のステートメントを使用します。
DELETE T1, T2
FROM T1
INNER JOIN T2 ON T1.key = T2.key
WHERE condition;
DELETEキーワードとFROMキーワードの間にテーブル名T1とT2を配置することに注意してください。 T1テーブルを省略すると、DELETEステートメントはT2テーブルの行のみを削除します。同様に、T2テーブルを省略すると、DELETEステートメントはT1テーブルの行のみを削除します。
この助けを願っています。