如何最好地生成具有相同 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 条记录。
假设我确实有一个 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 条记录。