sql AB, BA 去重问题请教

2022-11-29 12:21:09 +08:00
 qiyong

需求为:表中同时存在数据 AB 和 BA ,如{34 ,66} 和 {66 ,34} 但我们只想保留其中一种情况( AB 和 BA 视为同一种情况),如果表数据如下怎么做?

num_1 num_2
30 24
24 30
958 497
88 99
1690 次点击
所在节点    程序员
9 条回复
malusama
2022-11-29 12:22:51 +08:00
num_1 和 num_2 拼接, 排序, 然后用 row_number 打上序号
只去一个就可以
qinrui
2022-11-29 12:26:02 +08:00
update table xxx set num_3 =case when num_1>num_2 then num_2 else num_1 end ,num_4= case when num_1>num_2 then num_1 else num_2 end
optional
2022-11-29 12:35:03 +08:00
对 ab 排序拼接,然后 group by 或者 district by
optional
2022-11-29 12:35:13 +08:00
打错了 distinct
qiyong
2022-11-29 12:48:15 +08:00
@optional 可否给出个 sql 呢
qiyong
2022-11-29 12:48:49 +08:00
@malusama
@optional 可否给出个 sql 呢
bxb100
2022-11-29 13:01:04 +08:00
```sql
select distinct least(col_1, col_2), greatest(col_1, col_2)
from the_table
order by 1
```

https://stackoverflow.com/questions/64422759/remove-duplicate-combinations-between-two-columns-of-char-data-type-in-sql
SJH0402
2022-11-29 14:57:36 +08:00
@bxb100 老哥厉害
zhzy0077
2022-11-29 15:11:16 +08:00
create table A (
id BIGINT IDENTITY(1,1),
x int,
y int
);

insert into A values (30, 24), (24, 30), (958, 497), (88, 99)

这就是重复的行 要不重复的取个反就行

SELECT * FROM A
FULL OUTER JOIN A AA ON A.id <> AA.id
WHERE (
A.x = AA.x AND A.y = AA.y
) OR (
A.x = AA.y AND A.y = AA.x
)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/898757

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX