SQL 多表之间的查询,同一字段多个条件。

有表hr_epm_mainhr_epm_certcnocnamecnoname01张磊01身份证02李强01驾驶证03张伟01健康证04王强02身份证。。。。02驾驶证0... 有表hr_epm_main hr_epm_cert
cno cname cno name

01 张磊 01 身份证
02 李强 01 驾驶证
03 张伟 01 健康证
04 王强 02 身份证
。。。。 02 驾驶证
02 劳保证
03 身份证
03 健康证
03 学生证
04 身份证
04 驾驶证
04 劳保证
04 健康证
。。。。。。。
cno 字段相关联 需要查出 同时拥有身份证、驾驶证、健康证的人 或者 同时拥有身份证、劳保证的人 或者查出同时拥有所有证件的人 查询条件不固定 证书类型不限可能还有其他证件。 求大神解答。
展开
 我来答
Ice海Man
2013-12-18 · TA获得超过302个赞
知道小有建树答主
回答量:203
采纳率:0%
帮助的人:207万
展开全部

可以分两种语句

--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本证的人。

 

希望这样的回答能帮助到你,谢谢!

小豹子3366
2013-12-20 · TA获得超过4720个赞
知道小有建树答主
回答量:952
采纳率:70%
帮助的人:71.8万
展开全部
这是我查询出来的答案.比楼上的好,可不用修改语句,一直使用。
当然你问的问题也有问题。
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 胡汉三那 有计征
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaohaizichong
2013-12-15 · 超过34用户采纳过TA的回答
知道答主
回答量:110
采纳率:0%
帮助的人:64万
展开全部
你可以利用下边这个例子句型查询自己想要的,你这种不可知情况的问题,我觉得真正的一个答案不太可能
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='驾驶证';
这个句子的意思是查询出同时拥有身份证和驾驶证的人,希望能帮到你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式