我正在尝试删除mysql表中的孤立条目。
我有2张桌子,像这样:
表files:
files
| id | .... ------------ | 1 | .... | 2 | .... | 7 | .... | 9 | ....
表blob:
blob
| fileid | .... ------------ | 1 | .... | 2 | .... | 3 | .... | 4 | .... | 4 | .... | 4 | .... | 9 | ....
该fileid和id列可以被用来连接表在一起。
fileid
id
我想删除表blob中所有在表中fileid找不到的行files.id。
files.id
因此,使用上面的示例将删除表中的行:3&4(s)blob。
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上),以便在出现问题时可以使用回滚来还原更改。