我有两个表TableA
和TableB
,每个表都有一个名为ID
的字段。
我想删除TableA
中ID
与TableB
中的记录匹配的所有记录。
我尝试执行此命令,但未找到TableB
DELETE FROM TableA WHERE TableA.id=TableB.id;
答案 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