Как удалить противоположные строки из таблицы SQL
Вопрос
У меня есть следующая таблица 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
.
Не связан с StackOverflow