先说说我的用法吧
SELECT A.*, C.DisplayName FROM Table_A A LEFT JOIN TABLE_B B on A.id = B.Ref_A_ID LEFT JOIN Table_C C on B.Ref_C_ID = C.ID WHERE 1 = 1
先解释下为什么这么写: A 是主表,B是辅助表,B中有一个字段是引用C的PK.最后呈现出来的就是通过C进行一个ID到DisplayName的转换。
目前按照这么写满足了我的要求了:1 SQL语法满足 2 确实按照我的想法在工作。
但是我的疑惑就是 LEFT JOIN的用法。
A LEFT JOIN B,就是A和B做笛卡尔乘积,形成一个虚拟表,如果 LEFT JOIN C ON A.X = C.Y 这样也好理解,但是我这里写成B和C做Left JOIN?是不是意味着 A和B的结果不会受到C和B的影响呢?
...全文
22612打赏收藏
【100分在线等】这样使用Left JOIN有危险吗?
先说说我的用法吧 SELECT A.*, C.DisplayName FROM Table_A A LEFT JOIN TABLE_B B on A.id = B.Ref_A_ID LEFT JOIN Table_C C on B.Ref_C_ID = C.ID WHERE 1 = 1 先解释下为什么这么写: A 是主表,B是辅助表,B中有一个字段是引用C的PK.最后呈现出来的就是通过C进行一个ID到DisplayName的转换。 目前按照这么写满足了我的要求了:1 SQL语法满足 2 确实按
SELECT A.*, C.DisplayName FROM Table_A A
LEFT JOIN TABLE_B B on A.id = B.Ref_A_ID
LEFT JOIN Table_C C on B.Ref_C_ID = C.ID
WHERE (not (B.Ref_A_ID is null)) and (not (C.ID is null))
没有问题的.
left join 比join多出来的是A.id中没有找到的对应的B.Ref_A_ID,这时的B中的列值是null
要是你还不放心,那你就
SELECT A.*, C.DisplayName FROM Table_A A LEFT JOIN
(select B.Ref_A_ID ,C.DisplayName from TABLE_B B JOIN Table_C C on B.Ref_C_ID = C.ID ) B
on A.id = B.Ref_A_ID
WHERE 1 = 1