我有一张计划表,例如
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< t2.id
> sort(array [t1.id,t2.id])AS ID … GROUP BY ID
解决方法:
Also, is this fundamentally the wrong
approach for solving this problem?
我认同.这看起来类似于set packing problem和/或set cover problem.
我不认为使用单个查询执行此操作是可行的(或者甚至可能).你需要尽可能多的连接来覆盖服务,并且许多WHERE条件是该数字的函数.
我认为一个简单修剪的天真,蛮力的方法可能在这里工作,因为你想要的是所有可能组合的列表无论如何.或者您可以预先计算所有有效组合并将它们存储在一个大表中.
无论你做什么,这看起来至少O(rowscols)对我有用.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。