TSQL:这个连接是如何解析的?
我正在做这些连接:TSQL:这个连接是如何解析的?,sql,join,sql-server-2008-r2,Sql,Join,Sql Server 2008 R2,我正在做这些连接: from #lps_at_lines2 as l2 left join jobmatl as jm on l2.item = jm.item inner join job as j on jm.job = j.job and jm.suffix = j.suffix 我不知道如何连接将解决,就像读象形文字给我 我猜首先,#lps_在第2行得到左连接'd到作业材料,然后以某种方式作业得到内部连接'd到jm。这是正确的吗?在FROM子句中,JOINs从左到右解析,即英语
from #lps_at_lines2 as l2
left join jobmatl as jm on l2.item = jm.item
inner join job as j on jm.job = j.job
and jm.suffix = j.suffix
我不知道如何连接将解决,就像读象形文字给我
我猜首先,
#lps_在第2行
得到左连接
'd到作业材料
,然后以某种方式作业
得到内部连接
'd到jm。这是正确的吗?在FROM
子句中,JOIN
s从左到右解析,即英语的阅读顺序。因此,左连接
在内部连接
之前进行处理(逻辑上)
内部联接
条件包括:
jm.job = j.job and jm.suffix = j.suffix
这些是指左连接的第二个表。由于NULL
值失败,内部联接
正在将前面的左联接
转换为内部联接
。换句话说,使用internaljoin
两种方法都应该得到相同的结果
请注意,您可以使用括号调整优先级,但您的查询版本不会这样做
一般来说,当混合使用内部联接和左联接时,我首先包括所有的内部联接,然后使用附加表进行左联接。在FROM
子句中,JOIN
s从左到右解析,这是英语的阅读顺序。因此,左连接
在内部连接
之前进行处理(逻辑上)
内部联接
条件包括:
jm.job = j.job and jm.suffix = j.suffix
这些是指左连接的第二个表。由于NULL
值失败,内部联接
正在将前面的左联接
转换为内部联接
。换句话说,使用internaljoin
两种方法都应该得到相同的结果
请注意,您可以使用括号调整优先级,但您的查询版本不会这样做
通常,在混合内部联接和左联接时,我首先包括所有内部联接,然后左联接
添加其他表。将内部联接更改为左外部联接join@ganders为什么?我的问题是这个连接将如何解决。当一个l2记录在jm中没有匹配项时,那么一个伪jm记录将被连接,其所有列都为null。然后j内部连接到jm,但是由于null不能匹配(例如,当jm.job为null时jm.job=j.job不能匹配),所有外部连接的jm再次被丢弃。因此,您将使用内部jobmatal作为jm
。如果您希望这样,请更改此连接;如果您希望使用外部联接,请将内部联接作业更改为j
,将左联接作业更改为j
。从左到右,还有什么?通过“解析”,您的意思是如何解析它,或者它实际上是如何执行的?解析顺序是从左到右的,但实际执行(通常)可以是任何顺序,无论优化器认为什么是最好的。将内部联接更改为左-外部联接join@ganders为什么?我的问题是这个连接将如何解决。当一个l2记录在jm中没有匹配项时,那么一个伪jm记录将被连接,其所有列都为null。然后j内部连接到jm,但是由于null不能匹配(例如,当jm.job为null时jm.job=j.job不能匹配),所有外部连接的jm再次被丢弃。因此,您将使用内部jobmatal作为jm
。如果您希望这样,请更改此连接;如果您希望使用外部联接,请将内部联接作业更改为j
,将左联接作业更改为j
。从左到右,还有什么?通过“解析”,您的意思是如何解析它,或者它实际上是如何执行的?解析顺序是从左到右的,但实际执行(通常)可以是任何顺序,无论优化器认为什么是最好的。