我有下面的代码,我希望得到一些帮助,确保这是正确的。 (缓慢的一天)
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中是否存在记录。
答案 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'