日期:2014-05-17  浏览次数:20540 次

100分请教一个多表SQL连接,谢谢
表如下:
表1
[DClass]
ID|clan
--------
2 |aa
3 |bb
--------
表2
[dinfo]
ID|DCID|Dname
-------------
1 |2   |da
2 |2   |ds
3 |3   |de
-------------
表3
[Tindex]
ID|Tno|tdate
----------
1 |001|2013-5-5
2 |002|2013-5-6
3 |003|2013-5-5
4 |004|2013-5-6
----------
表4
[Tbody]
ID|Iid|did|tnum|tm
-------------------
1 |1  |2  |5   |10
2 |1  |3  |2   |5
3 |2  |2  |5   |8
4 |2  |3  |2   |3
5 |1  |2  |5   |10
6 |3  |3  |2   |5
7 |3  |2  |5   |8
8 |2  |3  |2   |3
-------------------
关系:dclass.id=dinfo.dcid
     tindex.id=tbody.iid
     tbody.did=dinfo.id
要求结果:
tdate=2013-5-5
clan=aa

dname|tnum|tm
-----------------------
da   |0   |0
ds   |15  |28

谢谢,100分

------解决方案--------------------
不知道你的结果 怎么来的
dname
------解决方案--------------------
tnum
------解决方案--------------------
tm
-----------------------
da   
------解决方案--------------------
0   
------解决方案--------------------
0
ds   
------解决方案--------------------
15  
------解决方案--------------------
28


select dname,
tnum,
tm
from DClass dc
LEFT JOIN dinfo d
on dc.ID=d.DCID
LEFT JOIN Tbody t
on t.did=d.ID
LEFT JOIN Tindex ti
on  ti.id=t.iid
where ti.tdate='2013-5-5' AND dc.clan='aa'


------解决方案--------------------

with DClass(ID,clan) as(
select 2,'aa' union 
select 3,'bb')
,dinfo(ID,DCID,Dname) as(
select 1,2,'da' union 
select 2,2,'ds' union 
select 3,3,'de')
,Tindex(ID,Tno,tdate) as(
select 1,'001','2013-5-5' union
select 2,'002','2013-5-6' union
select 3,'003','2013-5-5' union 
select 4,'004','2013-5-6')
,Tbody(ID,Iid,did,tnum,tm)as(
select 1 ,1  ,2  ,5   ,10 union
select 2 ,1  ,3  ,2   ,5  union
select 3 ,2  ,2  ,5   ,8  union