来自sql中的交叉连接的组合(不是排列)

Ram*_*amy 16 sql self-join cross-join

如果我有一个我想要交叉连接的表,我该如何删除重复的行?换句话说,我怎么能做一个"订单无所谓"交叉加入?

所以例如,如果我有一个表T:

field |
-------
   A  |
   B  |
   C  |
Run Code Online (Sandbox Code Playgroud)

我交叉加入自己,所以我没有得到A | 一排

T as t1
cross join
T as t2
  on t1.field != t2.field
Run Code Online (Sandbox Code Playgroud)

我会得到以下内容:

field | field
------+-------
  A   |   B
  A   |   C
  B   |   A
  B   |   C
  C   |   A
  C   |   B
Run Code Online (Sandbox Code Playgroud)

但是,对我来说A,B与B,A相同.

有没有一个很好的方法来删除这些重复?换句话说,我希望组合而不是排列.

Bil*_*win 26

T as t1
inner join
T as t2
  on t1.field < t2.field
Run Code Online (Sandbox Code Playgroud)

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