mysql - 如果不存在则删除

标签 mysql sql

<分区>

我有两个表:

第一个表:f (a,b,c,d 是列)

a  |  b  |  c  |   d
1  |  2  |  3  |   4
5  |  6  |  7  |   8
9  |  10 |  11 |   12
13 |  14 |  15 |   16

第二个表:s (a,b,c,d 是列)

a  |  b  |  c  |   d
5  |  6  |  c  |   d
9  |  10 |  c  |   d
20 |  5  |  c  |   d

我只需要从f 表中删除不等于 行(介于fs 之间)

因此新的 f 表将如下所示:

a  |  b  |  c  |   d
5  |  6  |  7  |   8
9  |  10 |  11 |   12

如何知道两行是否相等? (我需要删除不等于)

如果 f.a=s.a AND f.b=s.b 两条线相等,我需要保留这条线。

我如何仅使用 Sql 构建它?所有我试图做的,但对我没有用。


这是我尝试做的来源示例:

DELETE FROM f WHERE NOT EXISTS (
     SELECT * FROM f inner join s on (f.a=s.a and f.b=s.b) 
)

最佳答案

您可以使用 DELETE/LEFT JOIN,这在 MySQL 中看起来像;

DELETE f 
FROM f
LEFT JOIN s 
  ON f.a = s.a AND f.b = s.b
WHERE s.a IS NULL

如果 f 和 s 之间没有匹配的行,则结果中的 s.a 将为 NULL,因此 f 中的相应行将被删除。

An SQLfiddle to test with.

并且,一如既往,在运行来自互联网上随机用户的具有潜在破坏性的 SQL 之前,请始终备份您的数据。

关于mysql - 如果不存在则删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27766112/

相关文章:

php - 使用枚举数据类型将 excel 文件导入数据库 - 陷入困境

mysql - 如何在 Eloquent Query Builder (Laravel 4) 中按 "SUM"排序

mysql - 将 character_set_client 指定为 MySQL 中表的默认字符集

sql - PostgreSQL:用以前的值填充时间序列查询中的 NULL 值

php - 从现有表自动生成 Doctrine 实体

php - foreach 行插入 foreach

php - 为什么这个 SQL 不正确(MySQL)?

sql - SSIS 表达式转 SQL 语句

sql - 如何使用instr()搜索多个子字符串

mysql - SQL 获取最近六个月的注册数据