小编典典

从另一个表中删除 ID 不匹配的 sql 行

all

我正在尝试删除 mysql 表中的孤立条目。

我有 2 个这样的表:

files

| id | ....
------------
| 1  | ....
| 2  | ....
| 7  | ....
| 9  | ....

blob

| fileid | ....
------------
| 1  | ....
| 2  | ....
| 3  | ....
| 4  | ....
| 4  | ....
| 4  | ....
| 9  | ....

fileidid列可用于将表连接在一起。

我想删除表blobfileid找不到的所有行files.id

因此,使用上面的示例将删除blob表中的行:3 和 4(s)。


阅读 74

收藏
2022-07-12

共1个答案

小编典典

使用 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)

使用不在:

DELETE FROM BLOB
 WHERE fileid NOT IN (SELECT f.id 
                        FROM FILES f)

警告

尽可能在事务中执行 DELETE(假设支持 - IE:不在 MyISAM 上),以便在出现问题时可以使用回滚来恢复更改。

2022-07-12