2013-10-06 2 views
1

У меня есть таблица с содержимым, как следующее:различающихся значений для двух столбцов в MySQL

+----+-----------+---------+--------+------+ 
| id | text_from | text_to | text | seen | 
+----+-----------+---------+--------+------+ 
| 1 | A   | B  | Hello1 | 0 | 
| 2 | X   | Y  | Hello2 | 1 | 
| 3 | Y   | X  | Hello3 | 1 | 
| 4 | B   | A  | Hello4 | 1 | 
+----+-----------+---------+--------+------+ 

Это разговор, как А посылает текст B, B посылает к А и т.д. Как я могу получить Разговор DISTINCT? Например, отчетливый разговор между А и В, или X и Y и т.д.

Я хочу, чтобы получить что-то вроде

+----+-----------+---------+--------+------+ 
| id | text_from | text_to | text | seen | 
+----+-----------+---------+--------+------+ 
| 1 | A   | B  | Hello1 | 0 | 
| 2 | X   | Y  | Hello2 | 1 | 
+----+-----------+---------+--------+------+ 

Если однажды text_from и text_to имеет два уникальных значения, оно не может быть повторен. Например, если есть text_from = A, text_to = B, таблица не должна иметь text_from = B, text_to = A.

Я пытаюсь несколько методов для DISTINCT и GROUP BY с нескольких часов, но не мог фигурировать любое решение! Любые предложения будут ценны.

+0

Вы используете концепцию внутреннего соединения. –

+0

@ Субаш Да. Пока ничего не работает! Он различается между text_from и text_to, но находит несколько записей среди этих двух. Какие-либо предложения? – programmer

+0

, какое значение вы хотите фильтровать? –

ответ

1

Похоже, простой NOT EXISTS должен сделать трюк. Пример SQL Fiddle

select * 
from table t 
where not exists (
    select 1 
    from table t1 
    where 
    (
     (t.text_from = t1.text_from 
     and t.text_to = t1.text_to) 
     or (t.text_from = t1.text_to 
     and t.text_to = t1.text_from) 
    ) and t.id > t1.id 
) 
+0

Работающая как магия^_ ^. Огромное спасибо. – programmer

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