请问这个sql语句怎么理解?多个left join

时间:2021-09-23 20:06:32
select ...
FROM table1 a (nolock)
left join table2 b on a.id=b.id
        left join table3 c on c.name=a.name  and c.id=a.id

8 个解决方案

#1


左连接

#2


select ....
from (


select ... 
FROM table1 a (nolock) 
left join table2 b on a.id=b.id ) a


left join table3 c on c.name=a.name  and c.id=a.id

#3


首先取出table1 表中所有数据,然后再加上与table1 ,table2 匹配的的数据,然后再加上与table1 ,table3 匹配的的数据

#4


你一段一段运行,看看结果就知道了.
select ... 
FROM table1 a (nolock) 
left join table2 b on a.id=b.id 

select ... 
FROM table1 a (nolock) 
left join table2 b on a.id=b.id 
        left join table3 c on c.name=a.name  and c.id=a.id

#5


SELECT语句的FROM子句可以指定以下几种类型的连接
FROM子句关键字          相应的结果集
CROSS JOIN          笛卡尔乘积(所有可能的行对)
INNER JOIN          仅对满足连接条件的CROSS中的列
LEFT OUTER JOIN          一个表满足条件的行,和另一个表的所有行
RIGHT OUTER JOIN          与LEFT相同,但两个表的角色互换
FULL OUTER JOIN        LEFT OUTER 和 RIGHT OUTER中所有行的超集

#6



select .... 
from ( 


select ... 
FROM table1 a (nolock) 
left join table2 b on a.id=b.id ) a 


left join table3 c on c.name=a.name  and c.id=a.id
-----------------------------------
select .... 
from ( 


select ... 
FROM table1 a (nolock) 
left join table2 b on a.id=b.id ) a 


left join table3 c on (c.name=a.name  and c.id=a.id)//是不是加个括号更容易理解

是这个意思么
a,b先左连接 根据(a.id=b.id)
得到的结果
和c再左连接 根据((c.name=a.name  and c.id=a.id))

#7


yeah

#8


建议按F1看看帮助,这是左连接。
比如有n个table,n1 left join n2,然后left join n3,……
就是首先取出n1 表中所有数据,然后再加上与n1 ,n2 匹配的的数据,此时结果是n1 + (n1 & n2有关联的)中;然后再加上与n1, n3匹配的的数据,再加n1,n4匹配的数据……

#1


左连接

#2


select ....
from (


select ... 
FROM table1 a (nolock) 
left join table2 b on a.id=b.id ) a


left join table3 c on c.name=a.name  and c.id=a.id

#3


首先取出table1 表中所有数据,然后再加上与table1 ,table2 匹配的的数据,然后再加上与table1 ,table3 匹配的的数据

#4


你一段一段运行,看看结果就知道了.
select ... 
FROM table1 a (nolock) 
left join table2 b on a.id=b.id 

select ... 
FROM table1 a (nolock) 
left join table2 b on a.id=b.id 
        left join table3 c on c.name=a.name  and c.id=a.id

#5


SELECT语句的FROM子句可以指定以下几种类型的连接
FROM子句关键字          相应的结果集
CROSS JOIN          笛卡尔乘积(所有可能的行对)
INNER JOIN          仅对满足连接条件的CROSS中的列
LEFT OUTER JOIN          一个表满足条件的行,和另一个表的所有行
RIGHT OUTER JOIN          与LEFT相同,但两个表的角色互换
FULL OUTER JOIN        LEFT OUTER 和 RIGHT OUTER中所有行的超集

#6



select .... 
from ( 


select ... 
FROM table1 a (nolock) 
left join table2 b on a.id=b.id ) a 


left join table3 c on c.name=a.name  and c.id=a.id
-----------------------------------
select .... 
from ( 


select ... 
FROM table1 a (nolock) 
left join table2 b on a.id=b.id ) a 


left join table3 c on (c.name=a.name  and c.id=a.id)//是不是加个括号更容易理解

是这个意思么
a,b先左连接 根据(a.id=b.id)
得到的结果
和c再左连接 根据((c.name=a.name  and c.id=a.id))

#7


yeah

#8


建议按F1看看帮助,这是左连接。
比如有n个table,n1 left join n2,然后left join n3,……
就是首先取出n1 表中所有数据,然后再加上与n1 ,n2 匹配的的数据,此时结果是n1 + (n1 & n2有关联的)中;然后再加上与n1, n3匹配的的数据,再加n1,n4匹配的数据……