MySql - 生成单个表的笛卡尔积

时间:2016-07-20 12:26:05

标签: mysql self-join cartesian-product cartesian

我的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中用来生成单个表的这种笛卡尔积。任何有关这方面的帮助或指示都将不胜感激。

0 个答案:

没有答案