【发布时间】:2010-11-25 08:08:49
【问题描述】:
我有一个计划表,例如
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 ids ... GROUP BY ids
【问题讨论】:
-
当你说它不能包含相同的服务时,是作为一个完整的行还是单独的服务?因此,例如,第 1 行和第 2 行,它们不是同一行,因为数据是 1,1 和 1,0,因此总体上不同,但是您是否希望它们不匹配,因为两行数据上的 service1 都等于 1 ?
标签: sql mysql postgresql duplicates