我的MySQL数据库中有一个表“Data”。这包含以下结构:
CID | CVALUE
------------------
1 | 1A
1 | 1B
1 | 1C
2 | 2A
2 | 2B
3 | 3A
4 | 4A
4 | 4B
4 | 4C
5 | 5A
5 | 5B
我需要一个包含CVALUE列的所有组合的笛卡尔积。因此,我使用下面的查询,该查询引用具有多个别名的同一个表,将它们视为不同的表。
select a.cvalue, b.cvalue, c.cvalue, d.cvalue, e.cvalue
from data a, data b, data c, data d, data e
where a.cid = 1 and b.cid = 2 and c.cid = 3 and d.cid = 4 and e.cid = 5;
以上查询有效,我可以得到如下结果集
cvalue | cvalue | cvalue | cvalue | cvalue
--------------------------------------------
1A | 2A | 3A | 4A | 5A
1A | 2A | 3A | 4A | 5B
1A | 2A | 3A | 4B | 5A
1A | 2A | 3A | 4B | 5B
1A | 2A | 3A | 4C | 5A
1A | 2A | 3A | 4C | 5B
.... and so on for the remaining combinations.
这种方法的问题在于我不确定我将拥有多少个唯一的CID值,并且在查询中手动添加列条目以及向同一个表添加别名变得很麻烦。
我想知道是否有任何查询或函数可以在MYSQL中用来生成单个表的这种笛卡尔积。任何有关这方面的帮助或指示都将不胜感激。