Комбинации (не перестановки) из перекрестного соединения в sql
Если у меня есть таблица, которую я хотел бы перекрещивать с собой, как удалить повторяющиеся строки? Или, говоря иначе, как я могу выполнить "заказ не имеет значения", перекрестное присоединение?
Так, например, если у меня есть таблица T:
field |
-------
A |
B |
C |
и я перехожу к себе, чтобы я не получил A | Строки
T as t1
cross join
T as t2
on t1.field != t2.field
Я бы получил следующее:
field | field
------+-------
A | B
A | C
B | A
B | C
C | A
C | B
Однако для меня A, B то же, что и B, A.
Есть ли хороший способ удалить эти дубликаты? Другими словами, я хочу, чтобы комбинации не были перестановками.
Ответы
Ответ 1
T as t1
inner join
T as t2
on t1.field < t2.field
FWIW, вы можете просто использовать INNER JOIN
для этого, это не строго a CROSS JOIN
. MySQL (и, возможно, некоторые другие РСУБД) рассматривает эти два типа соединения как идентичные, но в ANSI SQL перекрестное объединение не имеет условия соединения - это преднамеренное декартово произведение.