如何最好地生成具有相同 table 的不同列的笛卡尔积?

How best can I produce a cartesian product with the different columns of a same table?

假设我确实有一个 table ManjoloHigh 包含以下列:Firstname, Surname, Age, Gender, Village,并且您需要根据以下这两列生成笛卡尔积: Village, Firstname

在 T-SQL 中生成笛卡尔积的最佳方法是什么?

通过给列命名并使用相同的别名 table 以不同方式满足生成笛卡尔积的要求,如下所示:

SELECT V.Village, F.Firstname 
FROM MANJOLOHIGH AS V 
CROSS JOIN MANJOLOHIGH AS F; 

此代码将生成 V.Village 行乘以 F.Firstname 行的结果集。

@Lanceleazol,请参阅下面的修改:您将需要一个 distict 以防止出现重复条目​​。

SELECT DISTINCT V.Village, F.Firstname 
FROM MANJOLOHIGH AS V 
CROSS JOIN ( SELECT DISTINCT F.Firstname 
                FROM
                 MANJOLOHIGH AS F) F 

假设您正在尝试检索给定列中值的一组唯一可能组合。

您可以通过创建一个巨大的笛卡尔积来扩展您的结果集,然后是 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

鉴于您谈论的是五个专栏,我强烈建议使用后者。 给定 table 的 1000 条记录,在应用 DISTINCT 之前,第一个结果集将产生 1000 * 1000 * 1000 * 1000 * 1000 条记录。