MySQL перекрёстное соединение, но без дублированной пары? - PullRequest
6 голосов
/ 21 марта 2011

Допустим, у меня есть следующая строка в моей таблице

строки таблицы

id
63
64
65
66
67
68

Если я выполню следующий запрос, я получу 30 строк.

SELECT r1.id, r2,id 
  FROM rows AS r1 
    CROSS JOIN rows AS r2 
  WHERE r1.id!=r2.id

результат:

63  64
65  64
66  64
67  64
68  64
64  63
65  63
66  63
67  63
68  63
63  65
64  65
66  65
67  65
68  65
63  66
64  66
65  66
67  66
68  66
63  67
64  67
65  67
66  67
68  67
63  68
64  68
65  68
66  68
67  68

как бы получить следующий результат вместо вышеуказанного?

63,64  
63,65   
63,66
63,67
63,68

64,65
64,66
64,67
64,68

65,66
65,67
65,68

66,67
66,68

67,68

как видите, янапример, не хочу получать 63,64 и 64,63.

Ответы [ 2 ]

16 голосов
/ 21 марта 2011

Простой, объединение только со значениями, превышающими текущее.

select r1.id, r2,id 
from rows r1 
cross join rows r2 
where r1.id < r2.id
2 голосов
/ 21 марта 2011

Просто добавьте одно условие.Левая сторона всегда должна быть меньше правой.Это исключит все нежелательные случаи.

select r1.id, r2,id from rows as r1 cross join rows as r2 where r1.id!=r2.id and r1.id <r2.id
...