2011-12-21 76 views
1

我有两个表TableATableB,并且每个表都有一个名为ID的字段。在MySQL中删除两个表中的ID匹配的记录

我想删除TableA中的所有记录,其中IDTableB中的记录匹配。

我尝试这样做的命令,但TableB找不到

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

回答

5

不能引用表B上WHERE,因为该表没有被连接。但在这种情况下,你甚至不需要一个JOIN,使用此:

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

是否超出每个记录的子查询或每个查询一次? EX:如果我在表'TableA'中有100行'SELECT ID FROM TableB'运行100次或1次? – Kristian 2012-07-02 12:00:43

+1

子查询执行一次,然后将结果与'TableA'中的'id'进行比较。 – bfavaretto 2012-07-02 13:57:51

1

我会用加入

DELETE TABLEA FROM TABLEA INNER JOIN TABLEB USING(ID) 

大的子查询可能会很慢,如果MySQL的结束有实际兑现临时表 - 绝对值得检查查询计划

2

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

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

这可能是简单的:

DELETE FROM tableA WHERE id = some_id LIMIT 1; 
1

如何使用INNER JOIN?这对我在MySQL中工作:

DELETE tablea FROM tablea 
INNER JOIN tableb 
ON tablea.ID = tableb.ID 
相关问题