三表交叉查询
我有三个数据库表,现在想交叉查询
表一,基本表(jb)
ID name
1张三
2李四
表二 生育情况表(sy)
PERSONID XHDATE
1 20100101
120110101
220030101
表三 身体健康检查表(JC)
PERSONID JCDATE JCJG
1 20111201 良好
1 20111225 一般
1 20110105 好
2 20110101 较差
2 20110505 良好
ID 与子表的PERSONID值相同可以作为连接字段
现在我想查询出如下结果
ID ,NAME ,SYCOUNT,JCDATE,JCJG
1 张三 2 20111225 一般
2 李四 1 20110505 良好
(就是汇总其生育小孩个数与最后一次检查时间与结果)
我用
SELECT JB.ID, JB.NAME,COUNT(SY.PERSONID),MAX(JC.JCDATE),MAX(JC.JCJG)
FROM JB LEFT JION SY ON JB.ID=SY.PERSONID LEFT JION JC ON JB.ID=JC.PERSONID
GROUP BY JB.ID, JB.NAME
但查询出的结果为
ID ,NAME ,SYCOUNT,JCDATE,JCJG
1 张三 6 20111225 一般
2 李四 2 20110505 良好
其SYCOUNT的值根据JC的PERSONID相同的记录条数进行翻倍了,请问如何解决!
[解决办法]
create table jb( ID int, name nvarchar(3))create table sy( PERSONID int, XHDATE varchar(8))create table jc( PERSONID int, JCDATE varchar(8), JCJG nvarchar(2))insert into jb select 1,'张三' union allselect 2,'李四'insert into sy select 1,'20100101' union allselect 1,'20110101' union allselect 2,'20030101'insert into jc select 1,'20111201','良好' union allselect 1,'20111225', '一般' union allselect 1,'20110105', '好' union all select 2,'20110101', '较差' union allselect 2,'20110505', '良好'select t1.ID,t1.name,SYCOUNT=(select COUNT(1) from sy where PERSONID=t1.ID),t2.JCDATE,t2.JCJG From jb t1 left join(select * from jc a where not exists (select 1 from jc where PERSONID=a.PERSONID and JCDATE>a.JCDATE)) t2 on t1.ID=t2.PERSONIDID name SYCOUNT JCDATE JCJG----------- ---- ----------- -------- ----1 张三 2 20111225 一般2 李四 1 20110505 良好(2 行受影响)
[解决办法]
楼上已经解决
[解决办法]
create table jb( ID int, name nvarchar(3))create table sy( PERSONID int, XHDATE varchar(8))create table jc( PERSONID int, JCDATE varchar(8), JCJG nvarchar(2))insert into jb select 1,'张三' union allselect 2,'李四'insert into sy select 1,'20100101' union allselect 1,'20110101' union allselect 2,'20030101'insert into jc select 1,'20111201','良好' union allselect 1,'20111225', '一般' union allselect 1,'20110105', '好' union all select 2,'20110101', '较差' union allselect 2,'20110505', '良好'select a.ID,max(a.name) name ,max(c.JCDATE) JCDATE,max(c.JCJG) JCJG from jb a left join sy b on a.ID=b.PERSONID left join jc c on b.PERSONID=c.PERSONIDgroup by a.ID
[解决办法]