我遇到了如下所示的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
答案 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
。考虑JOIN
和ON
的方式与打开和关闭方括号的方式相同。它们必须匹配,并且括号/括号匹配的规则也适用于确定特定JOIN
子句与哪个ON
相关。
在这里,您已向我们展示了ON
和JOIN
之间与e1
相关的e3
子句。还有一个ON
子句,然后在JOIN
和e2
之间控制(e1 joined to e3)
。