删除MySQL中的记录,其中两个表中的ID匹配

时间:2011-12-21 21:22:02

标签: mysql sql-delete records

我有两个表TableATableB,每个表都有一个名为ID的字段。

我想删除TableAIDTableB中的记录匹配的所有记录。

我尝试执行此命令,但未找到TableB

DELETE FROM TableA WHERE TableA.id=TableB.id;

4 个答案:

答案 0 :(得分:5)

您无法在WHERE上引用TableB,因为该表未加入。但在这种情况下,你甚至不需要JOIN,请使用:

DELETE FROM TableA WHERE id IN (SELECT id FROM TableB)

答案 1 :(得分:2)

您可能需要考虑使用foreign key constraints,这样您就不必手动执行这些类型的操作,而是数据库会为您处理它们。

例如,如果你在tableA和tableB之间有一个共享id,并且发生了从tableA的删除,MySQL会自动为你处理从tableB的删除,你不必担心加入其他表对tableA的FK约束。

可能很简单:

DELETE FROM tableA WHERE id = some_id LIMIT 1;

答案 2 :(得分:1)

我会使用连接

DELETE TABLEA FROM TABLEA INNER JOIN TABLEB USING(ID)

如果MySQL最终不得不实际实现临时表,那么大子查询可能会很慢 - 绝对值得检查查询计划

答案 3 :(得分:1)

如何使用INNER JOIN?这在MySQL中适用于我:

DELETE tablea FROM tablea
INNER JOIN tableb
ON tablea.ID = tableb.ID