可以分两种语句
--1.查询有某指定证件组合的人,下列就是同时身份证、驾驶证、健康证的人 或者 同时拥有身份证、劳保证的人
select a.cno,a.cname
from hr_epm_main a
inner join hr_epm_cert b on a.cno=b.cno
group by a.cno,a.cname
having sum(case when b.name in('身份证','驾驶证','健康证') then 1 esle 0 end)=3
or sum(case when b.name in('身份证','劳保证') then 1 esle 0 end)=2
如果你想查询同时拥有身份证、驾驶证、健康证、劳保证。可以在语句后面继续添加OR,例如
or sum(case when b.name in('身份证','驾驶证','健康证','劳保证') then 1 esle 0 end)=4 此时必须等于4,因为必须同时要满足有4本证。 希望这样写你能明白这语句
--2.查询拥有所有证件的人
select a.cno,a.cname
from hr_epm_main a
inner join hr_epm_cert b on a.cno=b.cno
inner join (select zhengjianSum=count(distinct name) from hr_epm_cert) c on 1=1
group by a.cno,a.cname,c.zhengjianSum
having sum(1)=c.zhengjianSum
上述语句:select zhengjianSum=count(distinct name) from hr_epm_cert 的意思是。系统总的证件类型有多少本。加入有10本。那么上述语句就是同时拥有这10本证的人。
希望这样的回答能帮助到你,谢谢!
这是我查询出来的答案.比楼上的好,可不用修改语句,一直使用。
当然你问的问题也有问题。
1.你是问查询必须持有2证的人
2.还是说如果有证件就查询出来
3.还是说查询拥有2证以上的人?
4.如果查询固定证件,可以使用楼上的,如果证件不固定,而且以后不想修改就用我的
select t1.id,t1.name,t2.name from Table_1 t1
right join Table_2 t2 on t1.id=t2.id
group by t1.name,t1.id,t2.name
id name name
1 张涛 军官证
1 张涛 身份证
1 张涛 学生证
2 王黎明 军官证
2 王黎明 身份证
3 胡汉三那 有计征
你可以利用下边这个例子句型查询自己想要的,你这种不可知情况的问题,我觉得真正的一个答案不太可能
select a.cname,b.name from hr_epm_main a,hr_epm_cert b where a.cno=b.cno and b.name='身份证' and b.name='驾驶证';
这个句子的意思是查询出同时拥有身份证和驾驶证的人,希望能帮到你