4

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

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

表 1 - 内容

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

表 2 - 投票

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

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

什么是最好的 - 左连接?内部联接?

在这里的任何帮助将不胜感激。

4

5 回答 5

9
DELETE Content, Votes
FROM Content
LEFT JOIN Votes
ON Votes.ContentID = Content.ContentID
WHERE Content.ContentID = ?
于 2010-07-08T16:26:03.880 回答
3

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

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

于 2010-07-08T15:33:11.307 回答
1
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

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

于 2010-07-08T15:32:17.373 回答
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

于 2010-07-08T15:45:44.797 回答
0

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

于 2014-04-09T02:20:15.960 回答