我有两张桌子:
第一张表: 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 表中删除不等于行( f 到 s 之间)
所以新的 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)
)
答案 0 :(得分:2)
您可以使用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中的相应行。
而且,与往常一样,在从互联网上的随机用户运行可能具有破坏性的SQL之前,请始终备份数据。
答案 1 :(得分:1)
如果没有子查询的连接,您可以执行您想要的操作:
DELETE FROM f
WHERE NOT EXISTS (SELECT 1 FROM s on f.a = s.a and f.b = s.b) ;
答案 2 :(得分:0)
您可以使用MERGE功能,速度更快。
您的脚本将如下所示:
MERGE f as target
USING s as source
ON (f.a=s.a and f.b=s.b)
WHEN NOT MATCHED BY target
THEN DELETE
;