Как удалить противоположные строки из таблицы SQL
У меня есть следующая таблица SQL:
A|B
---
w|x
x|w
y|z
z|y
Могу ли я построить запрос, который даст следующий результат:
A|B
---
w|x
y|z
Подводя итог, я хотел бы рассматривать два столбца как неупорядоченный набор, такой что (a,b) == (b,a).
2 ответа
Решение
"Лучший" код зависит от базы данных, но следующее - это dbms-независимость:
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
,