Как я могу ВЫБРАТЬ DISTINCT строк из двух столбцов из одной таблицы, игнорируя двунаправленные аналогии? - PullRequest
0 голосов
/ 01 марта 2019

У меня есть таблица flight следующим образом:

arrive      | depart
-------------------
New York    | London
New York    | Paris
Washington  | Rome
London      | New York
Rome        | Washington
New York    | Washington
New York    | London
Rome        | New York
Washington  | Rome

И я хотел бы создать отдельный / уникальный вывод, основанный на отличных от depart / arrive и arrive /depart - но не те, которые являются двунаправленными одинаковыми.Следовательно, результат, приведенный выше, будет иметь следующий вид:

depart      | arrive
______________________
New York    | London
New York    | Paris
Washington  | Rome
New York    | Washington
Rome        | New York

Непосредственно, чтобы получить отличную основу depart / arrive, но не может получить JOIN, UNION и т. Д., Чтобы игнорировать двунаправленную информацию(arrive / depart), но включают уникальные двунаправленные символы.

Вытягивание волос - нужна помощь.Спасибо

1 Ответ

0 голосов
/ 01 марта 2019

Вы можете использовать условие NOT EXISTS с коррелированным подзапросом для удаления дубликатов.

Однако следует иметь в виду, что для получения согласованного набора результатов необходимо определить правило, определяющее, какой из двух пунктов назначения считается depart, а какой - * 1005.*.Поскольку вы не предоставили правило, я выбрал значение с наименьшим алфавитным порядком как depart.

Запрос:

SELECT
    LEAST(depart, arrive) depart,
    GREATEST(depart, arrive) arrive
FROM mytable t
WHERE NOT EXISTS (
    SELECT 1 
    FROM mytable t1
    WHERE t1.arrive = t.depart AND t1.depart = t.arrive AND t1.depart > t.depart
)

Демонстрация на DB Fiddle:

| depart   | arrive     |
| -------- | ---------- |
| New York | Paris      |
| London   | New York   |
| Rome     | Washington |
| New York | Washington |
| New York | Rome       |

Еще одним решением было бы выбрать первый экземпляр дубликата в таблице, используя первичный ключ id, который, согласно комментариям,имеется в таблице:

SELECT depart, arrive
FROM mytable t
WHERE NOT EXISTS (
    SELECT 1 
    FROM mytable t1
    WHERE t1.arrive = t.depart AND t1.depart = t.arrive AND t1.id < t.id
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...