gpt4 book ai didi

sql - 将表格中的每一行与其他每一行进行一次且仅一次的比较

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

我有一个充满记录的 postgres 表,我想将这些记录与同一个表中的所有其他记录进行比较。考虑这张表。

create table temp (rec char(1));

填充了这些数据:

insert into temp (rec) values ('a');
insert into temp (rec) values ('b');
insert into temp (rec) values ('c');
insert into temp (rec) values ('d');

并使用此 SQL 查询:

select a.rec, b.rec
from temp a, temp b

这将返回 16 行(如预期的那样),但它包括额外的行,其中 'a' = 'a' 和 'b' = 'b'。要删除这些,我可以将查询更改为。

select a.rec, b.rec
from temp a, temp b
where a.rec <> b.rec

这会将结果减少到 12 行:

"a" - "b"
"a" - "c"
"a" - "d"
"b" - "a"
"b" - "c"
"b" - "d"
"c" - "a"
"c" - "b"
"c" - "d"
"d" - "a"
"d" - "b"
"d" - "c"

但是,它仍然会拉回一些重复项,不仅会拉回 'a' = 'b' 的记录,还会拉回我不感兴趣的 'b' = 'a'(我已经已经将记录 'a' 与记录 'b' 进行了比较,因此没有兴趣以相反的方式进行相同的比较)

那么,我该如何更改查询以将每一行与其他每一行进行一次且仅一次比较?

最佳答案

在最后一个查询中使用 distinct:

select distinct least(a.rec, b.rec), greatest(a.rec, b.rec)
from temp a
cross join temp b
where a.rec <> b.rec;

表达式 least(a.rec, b.rec), greatest(a.rec, b.rec)b,a 变成 a, bdistinct 然后删除重复项。

在线示例:https://rextester.com/TDZQ5153

关于sql - 将表格中的每一行与其他每一行进行一次且仅一次的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55451729/

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