SQL:仅使用每行一次的自联接

时间:2011-09-17 06:40:01

标签: sql join self-join

  

可能重复:
  combinations (not permutations) from cross join in sql

我目前有一张包含以下记录的表格:

A1
A2
A3
B1
B2
C1
C2

同一个字母表示一些共同的标准(例如“字母”栏的共同值)。我按照以下标准自我加入:

SELECT mytable.*, self.* FROM mytable INNER JOIN mytable AS self 
   ON (mytable.letter = self.letter and mytable.number != self.number);

此连接提供如下内容:

A1 A2
A2 A1
A1 A3
A3 A1
A2 A3
A3 A2
B1 B2
B2 B1
C1 C2
C2 C1

但是,我只希望每对包含一次(组合而不是排列)。 我如何得到以下内容:

A1 A2
A1 A3
A2 A3
B1 B2
C1 C2

1 个答案:

答案 0 :(得分:18)

稍微更改JOIN条件将达到您想要的效果..

而不是:

ON (mytable.letter = self.letter and mytable.number != self.number)

使用

ON (mytable.letter = self.letter and mytable.number > self.number)

这只会包含self.number大于mytable.number的组合,这实际上会将结果限制为每个组合的一个有效排序......