SQL: self join, используя каждую строку только один раз [дубликат]

Возможные Дубликаты:
комбинации (не перестановки) из cross join в sql

в настоящее время у меня есть таблица со следующими записями:

A1
A2
A3
B1
B2
C1
C2

где одна и та же буква обозначает некоторые общие критерии (например, общее значение для столбца "буква"). Я делаю self join по следующим критериям:

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 ответов


изменение условия соединения немного достигнет того, что вы хотите..

вместо:

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

использовать

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

это будет включать только комбинации, где self.number больше mytable.number что фактически ограничивает результаты одним действительным порядком каждой комбинации...