关于多表联合查询的有关问题
关于多表联合查询的问题
我有三个表,想从中得到一个数据:
A表
id XM XB CYRQ
1501290001 张三 男 2015-01-28
1501290002 李四 男 2015-01-29
B表
studyid SFXMDM CYRQ
1501290001 110035 2015-01-28
1501290001 110036 2015-01-28
1501290002 940210 2015-01-29
1501290002 940212 2015-01-29
C表
studyid SFXMDM XXDM
1501290001 110035 051416
1501290002 940210 051416
1501290002 940212 053123
最后想得到一个数据,就是A表存储着人员信息,B表示要做的项目的全部代码,C表储存着这个人已经做的项目,我想查询28号这一天有那些人没有把项目做完,结果应该是这样的:
1501290001 张三 男 110036
若是查询29号的话,应该无数据了.B表和C表都存在李四的SFXMDM的940210和940212.
请教各位老大应该用什么语句?
------解决思路----------------------
我有三个表,想从中得到一个数据:
A表
id XM XB CYRQ
1501290001 张三 男 2015-01-28
1501290002 李四 男 2015-01-29
B表
studyid SFXMDM CYRQ
1501290001 110035 2015-01-28
1501290001 110036 2015-01-28
1501290002 940210 2015-01-29
1501290002 940212 2015-01-29
C表
studyid SFXMDM XXDM
1501290001 110035 051416
1501290002 940210 051416
1501290002 940212 053123
最后想得到一个数据,就是A表存储着人员信息,B表示要做的项目的全部代码,C表储存着这个人已经做的项目,我想查询28号这一天有那些人没有把项目做完,结果应该是这样的:
1501290001 张三 男 110036
若是查询29号的话,应该无数据了.B表和C表都存在李四的SFXMDM的940210和940212.
请教各位老大应该用什么语句?
------解决思路----------------------
with a(id,xm,xb,cyrq) as
(
select '1501290001','张三','男','2015-01-28'
union all
select '1501290002','李四','男','2015-01-29'
),b(studyid,sfxmdm,cyrq) as
(
select '1501290001','110035','2015-01-28' union all
select '1501290001','110036','2015-01-28' union all
select '1501290002','940210','2015-01-29' union all
select '1501290002','940212','2015-01-29'
),c(studyid,sfxmdm,xxdm) as
(
select '1501290001','110035','051416' union all
select '1501290002','940210','051416' union all
select '1501290002','940212','053123'
)
select d.id,d.xm,d.sfxmdm from
(select a.id,a.xm,a.xb,b.sfxmdm from a inner join b on a.id=b.studyid)
as d where not exists(select * from c where c.studyid=d.id and c.sfxmdm
=d.sfxmdm)
/*
id xm sfxmdm
-----------------------------
1501290001 张三 110036
------------------------------
*/