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

标签 sql mysql

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

我有 2 个这样的表:

文件:

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

blob:

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

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

我想删除表 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/

相关文章:

java - Alter Session 在 MyBatis 中设置日期格式

sql - 位掩码的大小是否有实际限制?

c++ - 如何使用Qt获取数据库大小?

mysql - 比较 mysql 中的两个 Select 或表

sql - 如何在 Oracle 中使用内部联接进行更新

mysql db 查询逗号分隔值

sql - 聚集索引应该放在哪一列上?

mysql - 有没有什么规则规定sql语句子句的哪一部分可以用于条件/案例表达式?

MySql - 子表中列的 SUM() (1 :n) in a Sub-query/Outer Join using LIMIT

mysql - SQL 递归引用完整性