我正在尝试删除 mysql 表中的孤立条目。
我有 2 个这样的表:
表文件
:
| id | ....
------------
| 1 | ....
| 2 | ....
| 7 | ....
| 9 | ....
表blob
:
| fileid | ....
------------
| 1 | ....
| 2 | ....
| 3 | ....
| 4 | ....
| 4 | ....
| 4 | ....
| 9 | ....
fileid
和 id
列可用于将表连接在一起。
我想删除表 blob
中的所有行,其中 fileid
在表 files.id
中找不到。
因此,使用上面的示例将删除 blob
表中的行:3 和 4(s)。
最佳答案
使用 LEFT JOIN/IS NULL:
DELETE b FROM BLOB b
LEFT JOIN FILES f ON f.id = b.fileid
WHERE f.id IS NULL
使用不存在:
DELETE FROM BLOB
WHERE NOT EXISTS(SELECT NULL
FROM FILES f
WHERE f.id = fileid)
使用 NOT IN:
DELETE FROM BLOB
WHERE fileid NOT IN (SELECT f.id
FROM FILES f)
警告
尽可能在事务中执行 DELETE(假设支持 - IE:不在 MyISAM 上),以便在出现问题时使用回滚恢复更改。
关于sql - 从另一个表中删除 ID 不匹配的 sql 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3384127/