我希望根据ID在1个查询中删除两个不同表中的信息。
我已经在这里尝试了几种解决方案来完成这项任务,但仍然没有完成我想要做的事情。
表1 - 内容
---------- ---------
ContentID | Content
--------------------
表2 - 投票
---------------------------
VoteID | ContentID | Vote
---------------------------
我想根据其ID 删除内容行,删除任何或所有投票(可能有0个投票记录)。我 NOT 想要使用事务,级联删除或使用2个不同的查询。
这里最好的是什么 - LEFT JOIN? INNER JOIN?
非常感谢任何帮助。
答案 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中的匹配行。
答案 4 :(得分:0)
不使用" JOINS"在我寻找解决方案时,我能想到的最简单的是DELETE a.*,b.* FROM table1 AS a, table2 AS b WHERE a.id = b.id AND a.field = 1