SQL como simular um xor?
Eu estou querendo saber se alguém pode me ajudar a resolver esta questão que eu tenho em uma entrevista de emprego. Vamos dizer que eu tenho duas tabelas 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
A questão era escrever uma consulta SQL que retornaria todas as linhas que estão emtable1
outable2
mas não ambos, ou seja:
result
------------
id | name
------------
4 | delta
5 | echo
7 | golf
8 | hotel
9 | india
Eu pensei que poderia fazer algo como uma junção 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
mas isso me dá um erro de sintaxe no SQL Fiddle (eu não acho que ele suporta oFULL OUTER JOIN
sintaxe). Fora isso, não consigo nem descobrir uma maneira de concatenar as linhas das duas tabelas, quanto mais filtrar as linhas que aparecem em ambas. Alguém pode me esclarecer e me dizer como fazer isso? Obrigado.