当前位置: 首页 > 面试题库 >

删除ID与另一个表不匹配的SQL行

高展
2023-03-14
问题内容

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

我有2张桌子,像这样:

files

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

blob

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

fileidid列可以被用来连接表在一起。

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

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


问题答案:

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



 类似资料:
  • 问题内容: 这可能很容易,但这是星期一早上。我有两个表: 表格1: 表2: 忽略其他字段…我想要一个SQL DELETE语句,该语句将删除存在与Table1.group相等的Table2.group的Table1中的所有行。因此,如果Table1的一行具有group = 69,则当且仅当Table2中存在group = 69的行时,才应删除该行。 感谢您的任何帮助。 问题答案: 我认为这是您想要的

  • 问题内容: 我想删除另一个表示例中没有现有外键的所有行: 该 查询 将删除表2上ID为20和40的行。 我需要这样做,以便可以与table1和table2建立关系。 问题答案:

  • 我有一个表值,有8000万条记录。另一个表评估了拥有2.5亿条记录的_历史。 我想过滤values_history表,并希望保留在值表中预设id的唯一数据。 这个查询需要很长时间,我不得不中止这个过程。 请提出一些想法来加速这个过程。 我可以一次删除100万条这样的记录吗?

  • 我想不出如何将这个查询转换为delete-statment。 从购物车中选择DISTINCT carts.id,Shows.Date 内部连接tickets.cart=carts.id上的票证 内部连接actseats.ticket=tickets.id上的actseats 内部连接对actseats.showact=showacts.id显示作用 内部联接显示在shows.id=showacts

  • 问题内容: 我正在使用MySQL。我有一个名为EMP的表,现在我需要再创建一个具有相同架构,相同列和相同约束的表(EMP_TWO)。我怎样才能做到这一点? 问题答案: 要基于其他表结构/约束创建新表,请使用: 要跨多个数据复制,请使用 创建表格文档 当心关于LIKE选项的注意事项: 使用LIKE根据另一个表的定义(包括原始表中定义的任何列属性和索引)创建一个空表: CREATE TABLE new

  • 问题内容: 我在我的网站中使用带有php的sql server 2008 r2。我有2张桌子。 1是给员工的。 2是上班 我想进行查询,以便给我提供类型为<3的员工姓名的工作描述。 就是说我想得到这样的结果。 同样地 那么我如何使用sql查询实现此结果呢? 我无法更改表架构。 我试图与case语句一起使用,但无法正常工作。 请帮我使这个工作.. 问题答案: 它的内容并不能完全回答问题,但是会建议您