MySQL从2个表中删除记录

时间:2010-07-08 15:29:07

标签: mysql sql-delete

我希望根据ID在1个查询中删除两个不同表中的信息。

我已经在这里尝试了几种解决方案来完成这项任务,但仍然没有完成我想要做的事情。

表1 - 内容

---------- ---------
 ContentID | Content
--------------------

表2 - 投票

---------------------------
 VoteID | ContentID | Vote 
---------------------------

我想根据其ID 删除内容行,删除任何或所有投票(可能有0个投票记录)。我 NOT 想要使用事务,级联删除或使用2个不同的查询。

这里最好的是什么 - LEFT JOIN? INNER JOIN?

非常感谢任何帮助。

5 个答案:

答案 0 :(得分:8)

DELETE Content, Votes
FROM Content
LEFT JOIN Votes
ON Votes.ContentID = Content.ContentID
WHERE Content.ContentID = ?

答案 1 :(得分:2)

如果您有关系,可以尝试使用 ON DELETE CASCADE 选项。

另一种选择是创建一个存储过程并分两步执行删除,但只需一次服务器调用。

答案 2 :(得分:1)

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

虽然这是3张桌子,但我相信你能够根据自己的需要进行调整。

答案 3 :(得分:1)

您可以在DELETE语句中指定多个表,以根据WHERE子句中的特定条件从一个或多个表中删除行。但是,您不能在多表DELETE中使用ORDER BY或LIMIT。 table_references子句列出了连接中涉及的表。它的语法在第12.2.7.1节“JOIN语法”中描述。

从MySQL 4.0.0开始支持第一个多表DELETE语法。第二个是从MySQL 4.0.2开始支持的。

对于第一个多表语法,仅删除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中的匹配行。

此链接有用“http://dev.mysql.com/doc/refman/4.1/en/delete.html

答案 4 :(得分:0)

不使用" JOINS"在我寻找解决方案时,我能想到的最简单的是DELETE a.*,b.* FROM table1 AS a, table2 AS b WHERE a.id = b.id AND a.field = 1