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

Delete sql rows where IDs do not have a match from another table(从另一个表中删除 ID 不匹配的 sql 行)
本文介绍了从另一个表中删除 ID 不匹配的 sql 行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to delete orphan entries in a mysql table.

我有 2 张这样的桌子:

I have 2 tables like this:

文件:

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

blob:

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

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

The fileid and id columns can be used to join the tables together.

我想删除表 blob 中所有在表 files.id 中找不到 fileid 的行.

I want to delete all rows in table blob where fileid cannot be found in the table files.id.

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

So using the example above that would delete rows: 3 & 4(s) in the blob table.

推荐答案

使用 LEFT JOIN/IS NULL:

DELETE b FROM BLOB b 
  LEFT JOIN FILES f ON f.id = b.fileid 
      WHERE f.id IS NULL

使用 NOT EXISTS:

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 上),以便在出现问题时可以使用回滚来恢复更改.

Warning

Whenever possible, perform DELETEs within a transaction (assuming supported - IE: Not on MyISAM) so you can use rollback to revert changes in case of problems.

这篇关于从另一个表中删除 ID 不匹配的 sql 行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)