210

2 つのテーブルがあり、1 つはジョブの締め切り用、もう 1 つはジョブの説明用です。各ジョブはステータスを取ることができ、一部のステータスはジョブの締め切りを他のテーブルから削除する必要があることを意味します。

SELECT私の基準を満たすジョブ/締め切りは、次のように簡単に指定できますLEFT JOIN

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 構文にエラーがあります。job使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してくださいstatus

どうすれば有効なクエリにSELECT変換できますか?DELETE

4

6 に答える 6

396

を適用するテーブルを指定するだけです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` ....
于 2010-05-04T06:26:51.887 に答える
5
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 列があると仮定しています。

于 2010-05-04T06:24:40.503 に答える
1

MySQL では、DELETE ステートメントで INNER JOIN 句を使用して、テーブルから行を削除し、別のテーブルの一致する行を削除できます。

たとえば、指定した条件を満たす T1 テーブルと T2 テーブルの両方から行を削除するには、次のステートメントを使用します。

DELETE T1, T2
FROM T1
INNER JOIN T2 ON T1.key = T2.key
WHERE condition;

テーブル名 T1 と T2 を DELETE キーワードと FROM キーワードの間に入れていることに注意してください。T1 テーブルを省略した場合、DELETE ステートメントは T2 テーブルの行のみを削除します。同様に、T2 テーブルを省略した場合、DELETE ステートメントは T1 テーブルの行のみを削除します。

この助けを願っています。

于 2019-02-19T06:57:20.423 に答える