sql-server – ON子句的位置现实上意味着什么?
发布时间:2021-03-14 02:00:18 所属栏目:编程 来源:网络整理
导读:正常的JOIN … ON …语法是众所周知的.可是也可以将ON子句与它对应的JOIN分隔定位.这是在实践中很少见到的对象,在教程中找不到,我没有发明任何收集资源乃至提到这是也许的. 这是一个可以玩的剧本: SELECT *INTO #widgets1FROM (VALUES (1),(2),(3)) x(Widget
|
正常的JOIN … ON …语法是众所周知的.可是也可以将ON子句与它对应的JOIN分隔定位.这是在实践中很少见到的对象,在教程中找不到,我没有发明任何收集资源乃至提到这是也许的. 这是一个可以玩的剧本: SELECT *
INTO #widgets1
FROM (VALUES (1),(2),(3)) x(WidgetID)
SELECT *
INTO #widgets2
FROM (VALUES (1,'SomeValue1'),(2,'SomeValue2'),(3,'SomeValue3')) x(WidgetID,SomeValue)
SELECT *
INTO #widgetProperties
FROM (VALUES
(1,'a'),(1,'b'),'b'))
x(WidgetID,PropertyName)
--q1
SELECT w1.WidgetID,w2.SomeValue,wp.PropertyName
FROM #widgets1 w1
LEFT JOIN #widgets2 w2 ON w2.WidgetID = w1.WidgetID
LEFT JOIN #widgetProperties wp ON w2.WidgetID = wp.WidgetID AND wp.PropertyName = 'b'
ORDER BY w1.WidgetID
--q2
SELECT w1.WidgetID,wp.PropertyName
FROM #widgets1 w1
LEFT JOIN #widgets2 w2 --no ON clause here
JOIN #widgetProperties wp
ON w2.WidgetID = wp.WidgetID AND wp.PropertyName = 'b'
ON w2.WidgetID = w1.WidgetID
ORDER BY w1.WidgetID
--q3
SELECT w1.WidgetID,wp.PropertyName
FROM #widgets1 w1
LEFT JOIN (
#widgets2 w2 --no SELECT or FROM here
JOIN #widgetProperties wp
ON w2.WidgetID = wp.WidgetID AND wp.PropertyName = 'b')
ON w2.WidgetID = w1.WidgetID
ORDER BY w1.WidgetID
q1看起来很正常. q2和q3具有ON子句的这些不通俗的定位. 这个剧本不必然故意义.我很难计一律个故意义的场景. 那么这些不通俗的语法模式意味着什么?这是怎样界说的?我留意到并非全部两个ON子句的位置温次序都是应承的.打点这个的法则是什么? 写这样的查询也是个好主意吗? 办理要领假如你看一下FROM clause syntax diagram,你会发明ON子句只有一个处所:
<joined_table> ::=
{
<table_source> <join_type> <table_source> ON <search_condition>
...
}
你认为令人狐疑的是简朴的递归,由于< table_source>在< joined_table>中上面可所以另一个< joined_table>: [ FROM { <table_source> } [,...n ] ]
<table_source> ::=
{
table_or_view_name ...
...
| <joined_table>
...
}
为了停止夹杂,你应该在非显而易见的环境下行使括号(好比你的例子)在视觉上分隔< table_sources> ;;它们对付查询理会器不是必须的,但对人类有效. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读


