2013-05-01 2 views
3

Привет, я сильно обеспокоен этой проблемой, поскольку мне нужна уникальная комбинация из двух экземпляров одного и того же столбца.SQL уникальная комбинация из двух столбцов

Предположим, у меня есть таблица Animal with column Name. Я хочу все «уникальные» комбинации имени животного, а не повторять его сам или другой уже существующий ряд.

Образец данных:

Name 
------- 
Mouse 
Cat 
Dog 

Результат я хочу это:

Name1 Name2 
----- ----- 
Mouse Cat 
Mouse Dog 
Cat  Dog 

Я написал следующий запрос:

SELECT DISTINCT A1.name AS Name1, A2.name as Name2 
FROM Animal A1, Animal A2 
WHERE A1.name <> A2.name; 

Какие сетчатой ​​мне следующие результаты вместо:

Name1 Name2 
----- ----- 
Mouse Cat 
Mouse Dog 
Cat Mouse 
Cat Dog 
Dog Mouse 
Dog Cat 

Надеюсь, у меня есть смысл. Я не хочу дублировать обе комбинации, будь то слева или справа. Что касается «Distinct», то строки различны. Так есть ли способ устранить двойное?

+0

Это считается плохим стилем кодирования использовать неявное соединение. В вашем случае вы ** делаете ** хотите декартовой продукт, но лучше сказать это, используя 'FROM Animal A1 cross join Animal A2' –

ответ

7

Чтобы найти уникальные комбинации, просто изменить <> к <:

WHERE A1.name < A2.name; 
      ^^^ 
+1

Ничего себе это так просто? Для учебной цели ... можете ли вы объяснить, что <делает в этом случае? Я не могу понять, почему в этом сценарии было бы так полезно использовать знак меньше, чем знак. – chaser

+1

Скажите, что есть две строки: «Мышь Cat» и «Cat Mouse». Условие будет отфильтровывать первую строку, потому что 'Mouse' появляется после' Cat' в alfabet. – Andomar

+0

Хорошее объяснение! Я отмечу, что это разрешено. Спасибо вам за быстрый ответ. – chaser

Смежные вопросы