У меня есть таблица планов, например,
id | service_1 | service_2 | ...
---------------------------------
1 | true | true | ...
2 | true | false | ...
3 | false | true | ...
Я генерирую перестановку строк, присоединяясь к таблице слева ( любое количество раз ).
SELECT t1.id, t2.id, t3.id
FROM plans AS t1
LEFT JOIN plans AS t2
ON t1.id != t2.id
AND ...
LEFT JOIN plans AS t3
ON t1.id != t2.id AND t2.id != t3.id AND t3.id != t1.id
AND ...
Как мне сгенерировать все различные комбинации, которые предоставляют service_1 и service_2, избегая при этом дублирования. Строка соединения не может содержать один и тот же сервис. Например,
id | service_1 | service_2 | id | service_1 | service_2 |
---------------------------------------------------------
1 | true | true |NULL| NULL | NULL |
2 | true | false | 3 | false | true |
Я борюсь с условиями соединения для этого подхода.Кроме того, является ли это в корне неправильным подходом к решению этой проблемы?
Возможные способы, которыми я пытаюсь избежать дублирования:
упорядоченные множества (я пока не получилработает) например, t1.id
sort (array [t1.id, t2.id]) AS идентификаторы ... GROUP BY идентификаторы