gpt4 book ai didi

sql - SQL 规范是否提供了一种更好的方法来对两个集合进行异或运算?

转载 作者:行者123 更新时间:2023-11-29 11:32:00 25 4
gpt4 key购买 nike

我有一个结果集 A,它有 10 行 1-10 {1,2,3,4,5,6,7,8,9,10}B,它是 10 行,由偶数 1-20 {2,4,6,8,10,12,14,16,18,20} 组成。我想找到一组中的元素,而不是两者中的元素。行中没有其他列。

我知道 UNION 将是 A + B。我可以通过 A INTERSECT BAB 中找到它们。我可以用 A EXCEPT B 找到 Anot 中的所有行。

这让我想到了一个问题,如何找到 A 或 B 中的所有行,但不是两者,是否有 ( A EXCEPT B ) UNION ( B SQL 规范中的 A) 除外?我想要一组 {1,3,5,7,9,12,14,16,18,20}。我相信这也可以写成 A UNION B EXCEPT ( A INTERSECT B )

集合论中是否有数学上的原因说明为什么这不能在一次操作中完成(可以向不了解集合论的人解释)?或者,它只是没有实现,因为它很容易自己构建?或者,我只是不知道有更好的方法吗?

我认为这必须在某处的 SQL 规范中:我知道这东西很庞大。

最佳答案

还有另一种方法可以完成您想要的操作,即使用带有 WHERE 子句的 FULL OUTER JOIN 来删除出现在两个表中的行。这可能比您建议的构造更有效,但您当然应该测量两者的性能以确保。您可以使用以下查询:

SELECT COALESCE(A.id, B.id) AS id
FROM A
FULL OUTER JOIN B
ON A.id = B.id
WHERE A.id IS NULL OR B.id IS NULL

关于sql - SQL 规范是否提供了一种更好的方法来对两个集合进行异或运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2188100/

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