gpt4 book ai didi

sql - 相交删除

转载 作者:行者123 更新时间:2023-12-02 17:07:20 24 4
gpt4 key购买 nike

我有两个表,它们的列数相同,但没有主键(我知道,这不是我的错)。现在我需要删除表 A 中存在于表 B 中的所有行(它们是相等的,每行有 30 列)。

我想到的最直接的方法是进行INNER JOIN并解决我的问题。但是,为所有列写入条件(担心 NULL)并不优雅(可能是因为我的表也不优雅)。

我想使用INTERSECT。我不知道该怎么做?这是我的第一个问题:

我尝试过(SQL Fiddle):

declare @A table (value int, username varchar(20))
declare @B table (value int, username varchar(20))

insert into @A values (1, 'User 1'), (2, 'User 2'), (3, 'User 3'), (4, 'User 4')
insert into @B values (2, 'User 2'), (4, 'User 4'), (5, 'User 5')

DELETE @A
FROM (SELECT * FROM @A INTERSECT SELECT * from @B) A

但是所有行都已从表 @A 中删除。

这让我想到了第二个问题:为什么命令 DELETE @A FROM @B 会删除表 @A 中的所有行?

最佳答案

试试这个:

DELETE a 
FROM @A a
WHERE EXISTS (SELECT a.* INTERSECT SELECT * FROM @B)

从@A中删除,对于@A中的每条记录,@A中的记录与@B中的记录相交。

这是基于 Paul White 的 blog post使用 INTERSECT 进行不等式检查。

SQL Fiddle

关于sql - 相交删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31014126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com