以下のようなクエリを動的に生成しています。これは、結合条件の一部として同じ属性のいくつかを持つルールを回避し、結合条件の一部として (何度でも) 左結合することによって、ルールのさまざまな組み合わせを作成します。
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
しかし、両方ではありません。
編集:行の順列から組み合わせ行に移動したいと思います。