假设我有一个包含以下列的表ManjoloHigh
:Firstname, Surname, Age, Gender, Village
,并且您需要根据以下这两列来生成笛卡尔乘积:Village, Firstname
。
在T-SQL中生产笛卡尔积的最佳方法是什么?
答案 0 :(得分:1)
通过命名列和对同一表进行别名不同地满足了生成笛卡尔积的要求,如下所示:
SELECT V.Village, F.Firstname
FROM MANJOLOHIGH AS V
CROSS JOIN MANJOLOHIGH AS F;
此代码将产生V.Village
行乘以F.Firstname
行的结果集。
答案 1 :(得分:1)
@Lanceleazol,请参见以下修改:您将需要一个分隔符以防止出现重复条目。
SELECT DISTINCT V.Village, F.Firstname
FROM MANJOLOHIGH AS V
CROSS JOIN ( SELECT DISTINCT F.Firstname
FROM
MANJOLOHIGH AS F) F
答案 2 :(得分:0)
假设您要检索给定列中值的一组唯一可能的组合。
您可以通过创建一个巨大的笛卡尔积,然后跟DISTINCT
来爆炸结果集,如下所示:
SELECT DISTINCT V.Village, F.Firstname
FROM MANJOLOHIGH AS V
CROSS JOIN MANJOLOHIGH AS F
或者您可以在每列中创建唯一值的子集,然后交叉连接它们,如下所示:
SELECT V.Village, F.Firstname
FROM (SELECT DISTINCT Village FROM MANJOLOHIGH) AS V
CROSS JOIN (SELECT DISTINCT Firstname FROM MANJOLOHIGH) AS F
鉴于您正在谈论五栏,我强烈建议后者。
给定一个包含1000条记录的表,在应用DISTINCT
之前,第一个结果集将产生1000 * 1000 * 1000 * 1000 * 1000 * 1000条记录。