Como remover linhas opostas da tabela SQL
Pergunta
Eu tenho a seguinte tabela SQL:
A|B
---
w|x
x|w
y|z
z|y
Posso construir uma consulta que produza o seguinte resultado:
A|B
---
w|x
y|z
Para resumir, gostaria de tratar as duas colunas como um conjunto não ordenado, de modo que (a, b) == (b, a).
Solução
o "melhor" O código depende do banco de dados, mas a seguir é DBMS-Agnóstica:
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
Outras dicas
Você pode tentar o seguinte:
SELECT LEAST(a,b) a, GREATEST(a,b) b
FROM t
GROUP BY LEAST(a,b), GREATEST(a,b)
Com a seguinte mesa de teste t
:
CREATE TABLE t ( a VARCHAR(1), b VARCHAR(1) );
INSERT INTO t VALUES ('w','x'),('x','w'),('y','z'),('z','y');
ele retorna:
w x
y z
Usando LEAST
e GREATEST
também garante que isso w x
é devolvido em vez de x w
.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow