根据两个不同年份收集的地区(地区),我有一个假设的人口普查信息:
第1年表
District | Name
----------------
1 | Paul
1 | John
2 | Max
2 | Aaron
3 | Michael
第2年表
District | Name
1 | Paul
1 | John
1 | Michael
3 | Michael
我想要两个问题:
查询1:按地区列出新人。应该返回1区的迈克尔
查询2:按地区列出错过的人数。应该返回2区的Max和Aaron
答案 0 :(得分:0)
我会使用union all
和聚合来完成此操作。以下查询返回仅在一年内出现的名称/区域组合以及特定年份:
select district, name, min(yyyy)
from ((select 1 as yyyy, district, name from table1) union all
(select 2, district, name from table2)
) tt
group by district, name
having count(distinct yyyy) = 1;
答案 1 :(得分:0)
查询1:按地区列出新人。应该返回第1区的迈克尔
SELECT Name, District
FROM year2
WHERE (Name NOT IN
(SELECT Name
FROM year1
WHERE (District = year2.District)))
GROUP BY Name, District
查询2:按地区列出错过的人数。应该返回第2区的Max和Aaron
SELECT Name, District
FROM year1
WHERE (Name NOT IN
(SELECT Name
FROM year2
WHERE (District = District)))
GROUP BY Name, District
如果您需要进一步合并结果,请使用union all