Я динамически генерирую запрос, подобный приведенному ниже, который создает различные комбинации правил, оставляя само соединение (любое количество раз) и избегая правил с некоторыми из тех же атрибутов, что и часть условий соединения, например
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 ...
В настоящее время я удаляю дубликаты, создавая массив идентификаторов из соединенных строк, затем сортируя и группируя их:
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
Но не оба.
РЕДАКТИРОВАТЬ: Я хотел бы перейти от перестановкистрок в комбинации строк.