基于不匹配ID删除孤儿行
问题:
从blob
表中删除fileid
在files
表中找不到匹配id
的行。
表结构:
<code>files表: | id | .... | |---|---| | 1 | .... | | 2 | .... | | 7 | .... | | 9 | .... | blob表: | fileid | .... | |---|---| | 1 | .... | | 2 | .... | | 3 | .... | | 4 | .... | | 4 | .... | | 4 | .... | | 9 | .... |</code>
预期结果:
删除blob
表中fileid
为3和4的行,因为它们在files
表中没有匹配的fileid
。
解决方案:
1. 使用LEFT JOIN/IS NULL:
<code class="language-sql">DELETE b FROM BLOB b LEFT JOIN FILES f ON f.id = b.fileid WHERE f.id IS NULL</code>
2. 使用NOT EXISTS:
<code class="language-sql">DELETE FROM BLOB WHERE NOT EXISTS(SELECT NULL FROM FILES f WHERE f.id = fileid)</code>
3. 使用NOT IN:
<code class="language-sql">DELETE FROM BLOB WHERE fileid NOT IN (SELECT f.id FROM FILES f)</code>
警告:
为确保在出现错误时可以回滚,请在事务中执行DELETE操作。
以上是如何根据无与伦比的ID删除数据库表中的孤儿行?的详细内容。更多信息请关注PHP中文网其他相关文章!