我有两个表TableA
和TableB
,并且每个表都有一个名为ID
的字段。在MySQL中删除两个表中的ID匹配的记录
我想删除TableA
中的所有记录,其中ID
与TableB
中的记录匹配。
我尝试这样做的命令,但TableB
找不到
DELETE FROM TableA WHERE TableA.id=TableB.id;
我有两个表TableA
和TableB
,并且每个表都有一个名为ID
的字段。在MySQL中删除两个表中的ID匹配的记录
我想删除TableA
中的所有记录,其中ID
与TableB
中的记录匹配。
我尝试这样做的命令,但TableB
找不到
DELETE FROM TableA WHERE TableA.id=TableB.id;
不能引用表B上WHERE
,因为该表没有被连接。但在这种情况下,你甚至不需要一个JOIN
,使用此:
DELETE FROM TableA WHERE id IN (SELECT id FROM TableB)
我会用加入
DELETE TABLEA FROM TABLEA INNER JOIN TABLEB USING(ID)
大的子查询可能会很慢,如果MySQL的结束有实际兑现临时表 - 绝对值得检查查询计划
您可能需要考虑使用foreign key constraints,因此您不必手动执行这些类型的操作,而是数据库将为您处理它们。
例如,如果你在tableA和tableB之间有一个共享的id,并且发生了从tableA的删除,MySQL会自动处理你从tableB的delete,并且你不必担心加入到其他表对tableA有一个FK约束。
这可能是简单的:
DELETE FROM tableA WHERE id = some_id LIMIT 1;
如何使用INNER JOIN?这对我在MySQL中工作:
DELETE tablea FROM tablea
INNER JOIN tableb
ON tablea.ID = tableb.ID
是否超出每个记录的子查询或每个查询一次? EX:如果我在表'TableA'中有100行'SELECT ID FROM TableB'运行100次或1次? – Kristian 2012-07-02 12:00:43
子查询执行一次,然后将结果与'TableA'中的'id'进行比较。 – bfavaretto 2012-07-02 13:57:51