Вы можете использовать условие 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
)