SQL查询 - 需要确保我的逻辑正确

时间:2012-10-15 15:01:32

标签: sql-server tsql

我有下面的代码,我希望得到一些帮助,确保这是正确的。 (缓慢的一天)

Select 
    A.Label, A.Name, C.UID, D.Unit 
From 
    A 
inner join 
    B on A.UID = B.FUID 
left join 
   C on B.UID = C.UID
left join 
   D on C.unitID = D.ID
Where 
   C.LName = 'Gas'

上面的代码显示 - 获取Table A中与Table B中的记录相关联的所有标签和相应的名称,这些记录可能有也可能没有在C中链接到该记录的记录,并且在D和C.LName = 'gas'中可能有也可能没有与其相关联的记录。

这是正确的吗?我需要的是从B中存在的A中提取数据,无论C或D中是否存在记录。

2 个答案:

答案 0 :(得分:0)

没有

你需要把过滤器放在' Gas'在连接中,否则左连接将实际上是内连接

Select  
    A.Label, A.Name, C.UID, D.Unit  
From  
    A  
inner join B on A.UID = B.FUID  
left join C on B.UID = C.UID 
            and C.LName = 'Gas'
left join D on C.unitID = D.ID 

答案 1 :(得分:0)

使用ON A.UID = B.FUID代替where A.UID = B.FUID,如下所示:

Select A.Label, A.Name , FUID, D.Unit 
From A 
inner join B ON A.UID = B.FUID 
left join C ON B.UID = C.UID
left join D on C.unitID = D.ID
Where C.LName = 'Gas'