2011-09-17 21 views
8

可能重複:
combinations (not permutations) from cross join in sqlSQL:自連接只使用一次,每個行

我目前得到了與以下記錄的表:

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 
+0

已將標籤'self-join'添加到該答案,這就是我搜索的內容。 – EoghanM

回答

17

更改略有JOIN條件會實現你想要的..

相反的:

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

使用

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

這將只包含self.number大於012的組合這實際上將結果限制爲每個組合的一個有效排序...