2011-02-01 30 views
1

UPDATEスクリプトで同様のJOINを実行しましたが、SETとWHERE節で同じテーブルを使用しました。このDELETEスクリプトでは、別のテーブルで条件が真であるテーブルを削除する必要があります。例:FROM句のテーブルをWHERE句に含める必要がありますか?

DELETE FROM `db_A`.`table_A` 
JOIN `db_B`.`table_B` 
ON `table_A`.`id` = `table_B`.`id` 
WHERE `table_B`.`name` = 'Remove Me' 

私はこれを行うことができますか?

+1

...試しましたか? –

答えて

0

Delete Manualから、削除するテーブルはDELETEFROMの間になります。あなたは参加

DELETE `db_A`.`table_A` FROM `db_A`.`table_A` 
JOIN `db_B`.`table_B` 
ON `table_A`.`id` = `table_B`.`id` 
WHERE `table_B`.`name` = 'Remove Me' 
1

MYSQL documentationは、それは非常に明確はいあなたはこの

を行うことができますあなたが行を削除する DELETE文で複数のテーブルを指定することができますに関係するすべてのテーブルから削除する場合を除きWHERE 句の の特定の条件に応じて、1つまたは複数のテーブル から。ただし、ORDER BYまたはLIMITを複数テーブルの DELETEに使用することはできません。 table_references句 には、結合に関与するテーブルがリストされます。 構文はセクション 12.2.8.1、 "JOIN構文"で説明されています。最初の複合テーブル構文の

、FROM句 を削除する前に記載されているテーブルから のみ一致する行。 2番目の複数テーブルの 構文では、FROM句 (USING句の前)にリストされている テーブルの一致する行のみが削除されます。

DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 
WHERE t1.id=t2.id AND t2.id=t3.id; 

または::

DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 
WHERE t1.id=t2.id AND t2.id=t3.id; 
効果は、あなたが、同時に多くのテーブルから行 を削除することができますし、 のみ検索に を使用している追加のテーブルを持っているということです

これらのステートメントは3つのテーブルすべてを使用します削除する行を検索するときは3210ですが、 テーブルの一致する行のみを削除します t1とt2。

前述の例は、インナー は、LEFTとしてSELECT文、JOINに 許可結合の他のタイプを使用することができるDELETEステートメント、JOIN が、複数のテーブルを使用します。例えば、T2で一致していない をt1に存在する行を削除するために、 使用はLEFT JOINは:一般的な答えとして

DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL; 
The syntax permits .* after each tbl_name for compatibility with Access. 
0

、はい。指定したように、次のような条件で2番目のテーブルに参加することもできます。

T1から削除 ここで、idは(SELECT id FROM T1 JOIN T2 ON X = Y WHERE T2 。ヴァルは= "X")

これは少し重いですが、T2が子供であるならば、あなたはこれを減らすことができます。

(ヴァル= "X")

T2からYを選択理にかなっている?

関連する問題