【发布时间】: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
我有一个包含三行的单列表,如下所示:
col1
团队1
团队2
团队3
团队4
我想做一个自笛卡尔连接,结果如下:
团队 1、团队 2
团队 1、团队 3
团队 1、团队 4
团队 2,团队 3
团队 2、团队 4
团队 3、团队 4
【问题讨论】:
标签: sql database join cartesian
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 > t2.col1。否则你不会得到 (1,1),但当你只想要所有组合的笛卡尔积的一半时,你仍然会得到 (1,2) 和 (2,1)。
您可以将两个表连接在一起以获得预期的输出,如下所示:
select t1.col1, t2.col1
from table t1
join table t2
on t1.col1 <> t2.col1
【讨论】: