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
что фактически ограничивает результаты одним действительным порядком каждой комбинации...