2013-03-15 3 views
2

У меня есть таблица instructors со следующей strcture/данные:MySQL присоединиться к одной и той же таблице без дублей

----------------- 
|id | name  | 
----------------- 
|1 | saad  | 
|2 | imran | 
----------------- 

Я хочу сделать присоединиться к той же таблице без возврата повторяющихся результатов.

Если я делаю простое соединение, запрос возвращает 4 строки [saad, saad], [saad, imran], [imran, imran], [imran, saad].

И если я добавляю предложение where, он возвращает 2 строки [saad, imran], [imran, saad].

Однако я хочу только вернуть 1 строку (т.е. если [saad, imran] уже был возвращен, запрос не должен возвращать [imran, saad]).

Вот мой запрос до сих пор:

SELECT DISTINCT 
    i1.name AS name1, 
    i2.name AS name2 
FROM 
    instructors i1, instructors i2 
WHERE 
    i1.name != i2.name 
ORDER BY 
    name1, name2 

ответ

2

Попробуйте это:

SELECT DISTINCT 
    i1.name AS name1, 
    i2.name AS name2 
FROM 
    instructors i1, instructors i2 
WHERE 
    i1.id < i2.id 
ORDER BY 
    name1, name2 
+0

Спасибо, это работает для моих двух строк, но будет ли это работать независимо от количества строк в таблице? –

+0

Да, он должен работать для любого количества строк в таблице. – niculare

+0

Удивительный, спасибо за помощь. Я приму свой ответ, как только это позволит мне! –

1

Try:

SELECT DISTINCT 
    i1.name AS name1, 
    i2.name AS name2 
FROM 
    instructors i1, instructors i2 
WHERE 
    i1.name > i2.name 
ORDER BY 
    name1, name2 
+0

+1, потому что это работает, как хорошо. –