Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TSQL:这个连接是如何解析的?_Sql_Join_Sql Server 2008 R2 - Fatal编程技术网

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
。从左到右,还有什么?通过“解析”,您的意思是如何解析它,或者它实际上是如何执行的?解析顺序是从左到右的,但实际执行(通常)可以是任何顺序,无论优化器认为什么是最好的。