我在 mySQL 中有一个奇怪的请求。我发现了很多方法可以通过添加更多连接来对组合对或某个其他数字执行此操作,但我想知道是否有一种动态方法可以对任意数量的组合执行此操作。
解释一下我是否有一个表 table 有 1 列 (column_id) 和 (column_text)
Id | Text
--------
1 | A
2 | B
3 | B
4 | B
5 | A
然后通过运行带有参数 A 的过程 GetCombinations 应该产生:
CombinationId | Combinations
---------------------------
1 | 1
2 | 5
3 | 1,5
通过运行带有参数 B 的过程 GetCombinations 应该产生:
CombinationId | Combinations
---------------------------
1 | 2
2 | 3
3 | 4
4 | 2,3
5 | 2,4
6 | 3,4
7 | 2,3,4
显然数字越大,我预计结果会呈指数级增长。
这样的查询可能吗?我所能找到的只是使用连接将每个结果的长度限制为连接数量的结果。
谢谢
UPDATE
我找到一篇文章here https://dba.stackexchange.com/questions/29661/sql-query-for-combinations-without-repetition但组合的最大数量应该很小(最多 20 个左右)。在我的情况下,有 100 个组合,我计算出它将产生: 94268904488832477456261857430572424738096937640789516634942387772947070700232237988829761592077291198236 05850588608460429412647567360000000000000000000099行(笑)
所以我将我的答案归类为不可行
但是有没有办法通过最多 2 种组合获得这个结果?
CombinationId | Combinations
---------------------------
1 | 2
2 | 3
3 | 4
4 | 2,3
5 | 2,4
6 | 3,4
我找到了一个使用 JOIN 获取所有组合的查询,但我不确定如何生成组合 id 以及如何获取各个行。
UPDATE 2
使用解决了它
SELECT @rownum := @rownum + 1 AS 'CombinationId'
cross join (select @rownum := 0) r
我用 UNION ALL 进行了查询