我正在动态生成如下所示的查询,该查询通过对其自身进行左连接(任意次数)来创建不同的规则组合,并避免使用某些相同属性作为连接条件的一部分的规则,例如
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
Or
t1.ID | t2.ID | t3.ID
---------------------
C | B | A
但不是两者兼而有之。
编辑:我想从行排列变为组合行。
我建议不要加入 !=,而是尝试加入
然后,您将获得 t1.id > t2.id、t2.id > t3.id 等的所有组合。
行不会是“重复的”,因为它们是有序集,并且任何包含等效成员的集都必然会产生相同的有序集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)