如果我有一个我想要加入自己的表,我该如何删除重复的行?换句话说,我怎么能做一个“订单无所谓”交叉加入?
例如,如果我有一个表T:
field |
-------
A |
B |
C |
我和自己交叉加入,这样我就不会得到A |一行
T as t1
cross join
T as t2
on t1.field != t2.field
我会得到以下内容:
field | field
------+-------
A | B
A | C
B | A
B | C
C | A
C | B
然而,对我来说A,B与B,A相同。
有没有一种方法可以删除这些副本?换句话说,我想要的是组合而不是排列。
答案 0 :(得分:24)
T as t1
inner join
T as t2
on t1.field < t2.field
FWIW,你可以使用INNER JOIN
来做到这一点,它不是严格意义上的CROSS JOIN
。 MySQL(也许还有其他一些RDBMS)将这两种类型的连接视为相同,但在ANSI SQL中,交叉连接没有连接条件 - 它是一种有意识的笛卡尔积。