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).

Foi útil?

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
scroll top