22

如果我有一个表,我想交叉连接到自身,我怎样才能删除重复的行?或者换句话说,我怎样才能做一个“顺序无关紧要”的交叉连接?

例如,如果我有一个表 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 相同。

有没有删除这些重复项的好方法?换句话说,我想要组合而不是排列。

4

1 回答 1

34
T as t1
inner join
T as t2
  on t1.field < t2.field

FWIW,您可以只使用INNER JOIN它,它不是严格意义上的CROSS JOIN. MySQL(也许还有其他一些 RDBMS)将这两种类型的连接视为相同的,但在 ANSI SQL 中,交叉连接没有连接条件——它是一种经过深思熟虑的笛卡尔积。

于 2011-08-18T18:50:35.080 回答