gpt4 book ai didi

algorithm - 使用 EXCEPT 查找不同的 SQL 列

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:17:37 25 4
gpt4 key购买 nike

在选择之间使用 EXCEPT 查找不同的记录。给定查找记录的键,我如何指定导致差异的列?想对表的列进行某种二分查找,以按列减少单个 EXCEPTS,寻找更好的方法。

示例:

select 'A','B','C','D','E'
except
select 'A','F','C','D','Z'

结果:B,E

select 'A','F','C','D','Z'
except
select 'A','B','C','D','E'

结果:F,Z

最佳答案

我不确定这是否可能,甚至不可取。

在您的示例中,您正在与行进行比较,但除了我在 SQL 中基于集合的操作之一。它们处理两个不同的集合或关系,执行您在数学比较集合中会看到的可比选择。

所以

Table A Except Table B

返回不在表 B 中的所有表成员。

让我们扩展您的示例:

select 'A','B','C','D','E'
except
(select 'A','F','C','D','Z'
union
select 'A','F','X','D','Z'
)

Except 返回第一组中不存在于第二组中的成员,它们作为第一组的唯一成员出现。

但是你想要什么作为输出?因为,根据定义,Expect 的结果不是第二组的成员,如果你想要逐列比较,这将必须针对第二组的所有成员,或者在这种情况下

'B','E'
'B','C','Z'

你看,现在我们不再进行集合操作了。

另一个问题是表有不同的列。您建议的输出没有考虑到这一点。

你想看看这个输出吗?

select 'A' C1,'B' C2,'C' C3,'D' C4,'E' C5
except
select 'A','F','C','D','Z'
....
C1 C2 C3 C4 C5
NULL 'B' NULL NULL 'E'

或者这个输出

select 'A' C1,'B' C2,'C' C3,'D' C4,'E' C5
except
select 'A','F','C','D','Z'
....
Column1
'C2,C5'

或者这个输出

select 'A' C1,'B' C2,'C' C3,'D' C4,'E' C5
except
select 'A','F','C','D','Z'
....
Column1 Column2
'B' 'E'

或者这个输出

select 'A' C1,'B' C2,'C' C3,'D' C4,'E' C5
except
select 'A','F','C','D','Z'
....
Column1
'B,E'

回到基于集合的操作,它们对集合或结构相似的表进行处理,并返回一个结构相似的集合。

我的建议输出中只有一个可以做到这一点,但您仍然遇到要返回什么的问题。

如果您可以说明为什么需要找到这些差异,我们可以就如何实现这一点提出建议

这是每个集合中每一行与其他行的完整比较,返回不同的列:

select distinct
case when a.c1!=b.C1 then a.C1 else null end C1
,case when a.c2!=b.C2 then a.C2 else null end C2
,case when a.c3!=b.C3 then a.C3 else null end C3
,case when a.c4!=b.C4 then a.C4 else null end C4
,case when a.c5!=b.C5 then a.C5 else null end C5
from (values
('A','B','C','D','E')
,('A','B','C','D','Z')
,('1','2','3','4','5')
) a(C1,C2,C3,C4,C5)
cross join
(values
('A','F','C','D','Z')
,('A','F','C','D','Z')
,('A','F','C','D','Z')
,('A','B','C','D','E')
) b(C1,C2,C3,C4,C5)
where
not (
a.C1=b.c1
AND a.C2=b.c2
AND a.C3=b.c3
AND a.C4=b.c4
AND a.C5=b.c5)

事实是,您不能仅通过使用基于集合的运算符来做您想做的事。如果您可以进一步定义您的需求,或许我们可以找到解决方案。

(请注意,这不是上面的完整解决方案,我没有检查空值,而且性能很糟糕,基本上是笛卡尔积

关于algorithm - 使用 EXCEPT 查找不同的 SQL 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42006751/

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