这种SQL语法如何工作?多个左联接,单联接

时间:2018-09-18 04:33:34

标签: sql sql-server tsql

我遇到了如下所示的T-SQL语句,但我不知道如何为这样的语法建立联接:

SELECT TOP (1000) e2.[Id]
FROM [Sandbox].[dbo].[Employee] as e2
LEFT JOIN Employee AS e1 
LEFT JOIN Employee AS e3 ON e1.Id = e3.Id

3 个答案:

答案 0 :(得分:0)

我认为这会产生语法错误。因为在“首次左联接”中没有ON条件,所以它不会运行。但是您可以对单个表使用左连接,以根据某些条件更改其别名,效果很好。您能再说明一下输出结果吗?

答案 1 :(得分:0)

如果您在MSDN网站FROM (Transact-SQL)上查看语法,您将看到以下内容:

<joined_table> ::=   
{  
    <table_source> <join_type> <table_source> ON <search_condition>   
    | <table_source> CROSS JOIN <table_source>   
    | left_table_source { CROSS | OUTER } APPLY right_table_source   
    | [ ( ] <joined_table> [ ) ]   
}  
<join_type> ::=   
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]  
    JOIN  

您看到的地方(不是很清楚:)),每个JOIN 必须具有 ON子句,但CROSS JOIN除外。

JOIN子句放在WHERE子句中时,有一个例外,如下所示:

select * from t1, t2
where t1.id = t2.t1_id

由于我在查询中没有看到任何WHERE子句,因此该查询无法正常工作,您将得到类似以下内容的信息:

  

第15级,州1,第6行的消息102   'e1'附近的语法不正确。

答案 2 :(得分:0)

我建议您显示的不是完整的语句(如果它运行时没有错误),并且稍后您忽略了ON。考虑JOINON的方式与打开和关闭方括号的方式相同。它们必须匹配,并且括号/括号匹配的规则也适用于确定特定JOIN子句与哪个ON相关。

在这里,您已向我们展示了ONJOIN之间与e1相关的e3子句。还有一个ON子句,然后在JOINe2之间控制(e1 joined to e3)