TSQL:这个JOIN如何解决?

Dar*_*oid 0 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
Run Code Online (Sandbox Code Playgroud)

我不确定联合将如何解决,官方文档就像读取象形文字给我.

我的猜测是,首先#lps_at_lines2得到LEFT JOIN' jobmatl然后以某种方式job得到INNER JOIN'到jm之后.那是对的吗?

Gor*_*off 5

在一个FROM子句中,JOINs从左到右解析 - 英文阅读顺序.所以,在LEFT JOIN之前处理(逻辑上)INNER JOIN.

INNER JOIN条件包括:

jm.job = j.job and jm.suffix = j.suffix
Run Code Online (Sandbox Code Playgroud)

这些是指的第二个表LEFT JOIN.因为NULL值失败,所以INNER JOIN将前面的内容LEFT JOIN转换为INNER JOIN.换句话说,您应该使用INNER JOIN两者来获得相同的结果.

请注意,您可以使用括号调整优先级,但您的查询版本不会执行此操作.

通常,在混合内连接和左连接时,我首先包括所有内连接,然后LEFT JOIN包含其他表.