如果不存在则删除
DELETE if NOT EXIST
我有两个 table:
首先table: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
第二个table:s (a,b,c,d是列)
a | b | c | d
5 | 6 | c | d
9 | 10 | c | d
20 | 5 | c | d
我需要删除不等于行(在f到s之间) f table 只有
所以新的 f table 看起来像这样:
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 FROM f
WHERE NOT EXISTS (SELECT 1 FROM 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中的相应行将被删除。
并且,一如既往,请始终在 运行 可能具有破坏性 SQL 之前备份您的数据,因为互联网上的随机人员可能会破坏它。
您可以使用 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
;
我有两个 table:
首先table: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
第二个table:s (a,b,c,d是列)
a | b | c | d
5 | 6 | c | d
9 | 10 | c | d
20 | 5 | c | d
我需要删除不等于行(在f到s之间) f table 只有
所以新的 f table 看起来像这样:
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 FROM f
WHERE NOT EXISTS (SELECT 1 FROM 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中的相应行将被删除。
并且,一如既往,请始终在 运行 可能具有破坏性 SQL 之前备份您的数据,因为互联网上的随机人员可能会破坏它。
您可以使用 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
;