我想知道是否有人可以帮助我解决我在求职面试中遇到的这个问题.假设我有两个表:
table1 table2
------------ -------------
id | name id | name
------------ -------------
1 | alpha 1 | alpha
3 | charlie 3 | charlie
4 | delta 5 | echo
8 | hotel 7 | golf
9 | india
Run Code Online (Sandbox Code Playgroud)
现在的问题是写一个SQL查询将返回所有在任的行table1或table2而不是两个,即:
result
------------
id | name
------------
4 | delta
5 | echo
7 | golf
8 | hotel
9 | india
Run Code Online (Sandbox Code Playgroud)
我以为我可以做一些完全外连接:
SELECT table1.*, table2.*
FROM table1 FULL OUTER JOIN table2
ON table1.id=table2.id
WHERE table1.id IS NULL or table2.id IS NULL
Run Code Online (Sandbox Code Playgroud)
但这给了我一个关于SQL Fiddle的语法错误(我不认为它支持FULL OUTER JOIN语法).除此之外,我甚至无法找到一种方法来连接两个表的行,更不用说过滤掉两个表中出现的行.有人可以启发我,告诉我该怎么做?谢谢.
red*_*ent 12
好吧,你可以用UNION而不是OUTER JOIN.
SELECT * FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
UNION
SELECT * FROM table1 t1
RIGHT JOIN table2 t2 ON t1.id = t2.id
Run Code Online (Sandbox Code Playgroud)
这是我知道的一个小技巧:不等于和XOR一样,所以你可以让你的WHERE子句像这样:
WHERE ( table1.id IS NULL ) != ( table2.id IS NULL )
Run Code Online (Sandbox Code Playgroud)
select id,name--,COUNT(*)
from(
select id,name from table1
union all
select id,name from table2
) x
group by id,name
having COUNT(*)=1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18557 次 |
| 最近记录: |