gpt4 book ai didi

sql - 从多个自左连接中删除重复项

转载 作者:行者123 更新时间:2023-12-03 07:21:43 25 4
gpt4 key购买 nike

我正在动态生成如下所示的查询,该查询通过对其自身进行左连接(任意次数)来创建不同的规则组合,并避免使用某些相同属性作为连接条件的一部分的规则,例如

SELECT count(*) 
FROM rules AS t1
LEFT JOIN rules AS t2
ON t1.id != t2.id
AND ...
LEFT JOIN rules AS t3
ON t1.id != t2.id AND t1.id != t3.id AND t2.id != t3.id
AND ...

我目前正在通过从连接的行创建一个 id 数组,然后按它们进行排序和分组来删除重复项:

SELECT sort(array[t1.id, t2.id, t3.id]) AS ids
...
GROUP BY ids

我想知道是否有更好的方法来删除重复的行,例如

t1.ID | t2.ID | t3.ID
---------------------
A | B | C
C | B | A

应该是

t1.ID | t2.ID | t3.ID
---------------------
A | B | C

或者

t1.ID | t2.ID | t3.ID
---------------------
C | B | A

但不是两者兼而有之。

编辑:我想从行排列变为组合行。

最佳答案

我建议不要加入 !=,而是尝试加入 <=。

然后您将获得 t1.id > t2.id、t2.id > t3.id 等的所有组合。

行不会是“重复的”,因为它们是有序集,并且任何包含等效成员的集都必然会产生相同的有序集。

关于sql - 从多个自左连接中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4242715/

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