Комбинации (не перестановки) из перекрестного соединения в 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 перекрестное объединение не имеет условия соединения - это преднамеренное декартово произведение.