¿Cómo eliminar filas opuestas de tabla de SQL
Pregunta
Tengo la siguiente tabla SQL:
A|B
---
w|x
x|w
y|z
z|y
¿Puedo construir una consulta que producirá el siguiente resultado:
A|B
---
w|x
y|z
Para resumir, me gustaría para tratar las dos columnas como un conjunto desordenado, tal que (a, b) == (b, a).
Solución
El "mejor" código depende de la base de datos, pero que sigue es independiente del 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
Otros consejos
Se podría intentar lo siguiente:
SELECT LEAST(a,b) a, GREATEST(a,b) b
FROM t
GROUP BY LEAST(a,b), GREATEST(a,b)
Con el siguiente t
prueba de tabla:
CREATE TABLE t ( a VARCHAR(1), b VARCHAR(1) );
INSERT INTO t VALUES ('w','x'),('x','w'),('y','z'),('z','y');
devuelve:
w x
y z
El uso de LEAST
y GREATEST
también se asegura de que w x
se devuelve en lugar de x w
.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow