gpt4 book ai didi

sql - 不同的值忽略列顺序

转载 作者:行者123 更新时间:2023-12-03 01:08:52 24 4
gpt4 key购买 nike

我有一个类似的表格:-

+----+---+---+
| Id | A | B |
+----+---+---+
| 1 | 1 | 2 |
+----+---+---+
| 2 | 2 | 1 |
+----+---+---+
| 3 | 3 | 4 |
+----+---+---+
| 4 | 0 | 5 |
+----+---+---+
| 5 | 5 | 0 |
+----+---+---+

我想删除所有重复的值对,无论哪列包含哪个值,例如无论查询是什么,我想看到:-

+----+---+---+
| Id | A | B |
+----+---+---+
| 1 | 1 | 2 |
+----+---+---+
| 3 | 3 | 4 |
+----+---+---+
| 4 | 0 | 5 |
+----+---+---+

我想在 Microsoft SQL Server 中找到一个解决方案(必须在 <= 2005 中工作,尽管我对任何依赖于 >= 2008 功能的解决方案感兴趣)。

此外,请注意,A 和 B 将在 1-100 范围内(但这并不能永远保证。它们是代理种子整数外键,但外表可能会增长到最多几百行)。

我想知道我是否在这里错过了一些明显的解决方案。尽管我确实认为它们可能会起作用,但发生的所有事情似乎都有些过度紧张,例如:-

  • 让子查询返回一个位字段,其中每一位对应于其中一个 ID,并使用该值来删除重复项。
  • 以某种方式进行透视,删除重复项,然后取消透视。可能很棘手。

提前致谢!

最佳答案

测试数据和示例如下。

基本上,我们使用 OR 标准进行自连接,因此 a=a 和 b=b 或 a=b 和 b=a。

子查询中的 WHERE 为您提供每对要消除的最大值。

我认为这也适用于一式三份(注意我添加了第六行)。

DECLARE @t table(id int, a int, b int)

INSERT INTO @t
VALUES
(1,1,2),
(2,2,1),
(3,3,4),
(4,0,5),
(5,5,0),
(6,5,0)

SELECT *
FROM @t
WHERE id NOT IN (
SELECT a.id
FROM @t a
INNER JOIN @t b
ON (a.a=b.a
AND a.b=b.b)
OR
(a.b=b.a
AND a.a = b.b)
WHERE a.id > b.id)

关于sql - 不同的值忽略列顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359390/

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