Как удалить противоположные строки из таблицы SQL

StackOverflow https://stackoverflow.com/questions/2350492

  •  23-09-2019
  •  | 
  •  

Вопрос

У меня есть следующая таблица SQL:

A|B
---
w|x
x|w
y|z
z|y

Могу ли я создать запрос, который даст следующий результат:

A|B
---
w|x
y|z

Подводя итог, я хотел бы рассматривать два столбца как неупорядоченный набор, такой, что (a,b) == (b,a).

Это было полезно?

Решение

В "лучший" код зависит от базы данных, но следующий не зависит от СУБД:

SELECT      t.A,
            t.B
FROM        my_table t
LEFT JOIN   my_table t2
        ON  t.A = t2.B
        AND t.B = t2.A
        AND t.A < t.B
WHERE       t2.A IS NULL

Другие советы

Вы могли бы попробовать следующее:

SELECT LEAST(a,b) a, GREATEST(a,b) b
FROM t
GROUP BY LEAST(a,b), GREATEST(a,b)

Со следующей тестовой таблицей t:

CREATE TABLE t ( a VARCHAR(1), b VARCHAR(1) );

INSERT INTO t VALUES ('w','x'),('x','w'),('y','z'),('z','y');

он возвращается:

w  x
y  z

Используя LEAST и GREATEST также гарантирует, что w x возвращается вместо x w.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top