我在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'
我可以這樣做嗎?
我在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'
我可以這樣做嗎?
從Delete Manual開始,您要刪除的表格在DELETE
和FROM
之間。除非你想從涉及的所有表刪除的加入
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'
的MYSQL documentation非常清楚,是的,你可以做到這一點
您可以在 DELETE語句刪除行指定多個表從 一個或多個表,具體取決於WHERE 子句中的特定條件。但是,您不能在多表 DELETE中使用ORDER BY或LIMIT。 table_references子句 列出了參與連接的表。 其語法在第 12.2.8.1節「JOIN語法」中描述。
對於第一個多表語法, 只有與FROM子句之前列出的表 相匹配的行是 已刪除。對於第二個多表 語法,只刪除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;
這些陳述使用全部三個表 搜索要刪除的行時,但 只從表 中刪除與t1和t2匹配的行。
前述實施例使用INNER JOIN, 但多表DELETE語句 可以使用其他類型的SELECT語句,如LEFT JOIN聯接允許 。例如,要刪除 在T1中存在有對T沒有匹配行, 使用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.
作爲一個籠統的回答,是的。您可以按照您的說明將條件加入第二個表格,或者在子命令中拉出ID,例如:
DELETE FROM T1 WHERE id in(SELECT id FROM T1 JOIN T2 ON X = Y WHERE T2 。瓦爾= 「X」)
這是一個有點沉重的重量,但如果T2是孩子,可以將此減少到:
(從T2選擇Y其中val = 「X」)
合理?
...你試過了嗎? – 2011-02-01 17:41:40