SQL cómo simular un xor?
Me pregunto si alguien puede ayudarme a resolver esta pregunta que obtuve en una entrevista de trabajo. Digamos que tengo dos tablas como:
table1 table2
------------ -------------
id | name id | name
------------ -------------
1 | alpha 1 | alpha
3 | charlie 3 | charlie
4 | delta 5 | echo
8 | hotel 7 | golf
9 | india
La pregunta era escribir una consulta SQL que devolvería todas las filas que están entable1
otable2
pero no ambos, es decir:
result
------------
id | name
------------
4 | delta
5 | echo
7 | golf
8 | hotel
9 | india
Pensé que podía hacer algo como una unión externa completa:
SELECT table1.*, table2.*
FROM table1 FULL OUTER JOIN table2
ON table1.id=table2.id
WHERE table1.id IS NULL or table2.id IS NULL
pero eso me da un error de sintaxis en SQL Fiddle (no creo que sea compatible con elFULL OUTER JOIN
sintaxis). Aparte de eso, ni siquiera puedo encontrar una forma de concatenar las filas de las dos tablas, y mucho menos filtrar las filas que aparecen en ambas. ¿Puede alguien iluminarme y decirme cómo hacer esto? Gracias.