【问题标题】:DB cartesian product on same tableDB笛卡尔积在同一张桌子上
【发布时间】:2015-08-07 09:16:35
【问题描述】:

我有一个包含三行的单列表,如下所示:

col1

团队1
团队2
团队3
团队4

我想做一个自笛卡尔连接,结果如下:
团队 1、团队 2
团队 1、团队 3
团队 1、团队 4
团队 2,团队 3
团队 2、团队 4
团队 3、团队 4

【问题讨论】:

    标签: sql database join cartesian


    【解决方案1】:

    cartesian product 在 DB 术语中是 cross join,您可以删除 where 子句中团队相等的行:

    select
        t1.col1, t2.col1
    from teams as t1
        cross join teams as t2
    where
        t1.col1 <> t2.col1
    

    【讨论】:

    • 小修正:要获得问题中指定的期望结果(组合而不是排列),您需要where t1.col1 &gt; t2.col1。否则你不会得到 (1,1),但当你只想要所有组合的笛卡尔积的一半时,你仍然会得到 (1,2) 和 (2,1)。
    【解决方案2】:

    您可以将两个表连接在一起以获得预期的输出,如下所示:

    select t1.col1, t2.col1
    from table t1
    join table t2
    on t1.col1 <> t2.col1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 2023-03-14
      相关资源
      最近更新 更多