Wil*_*son 3 oracle join syntax
我不明白这个查询是如何工作的:
1 SELECT
2 EXTRACTVALUE(definition_xml.COLUMN_VALUE, 'SubtypeFieldInfo/DomainName') AS domain_name
3 FROM
4 SDE.GDB_ITEMS_VW i
5 JOIN SDE.GDB_ITEMTYPES it ON
6 i.Type = it.UUID
7 ,TABLE(XMLSEQUENCE(XMLType(Definition).Extract('/DETableInfo/Subtypes/Subtype/FieldInfos/SubtypeFieldInfo'))) definition_xml
Run Code Online (Sandbox Code Playgroud)
第 7 行开头的逗号有什么作用?
我的猜测是编写查询的人使用了某种 SQL 简写。也许如果有人可以帮助重新格式化“初学者 SQL”中的查询,它可能会有所帮助。
逗号是隐式连接运算符,ANSI SQL-89 语法。与以下中的逗号没有区别:
select ...
from a , b -- <-- this comma
where a.aid = b.aid;
Run Code Online (Sandbox Code Playgroud)
我认为你可以用CROSS JOIN*替换它,假设有足够新的 Oracle 版本。
的i,it并且definition_xml是3个连接表(2个表是基表或视图和第三是像一个派生表,甲骨文称他们为“表集合表达式”),但他们并没有什么不同有关如何将它们加入的别名或参考。
连接和最后一个表周围的括号是完全可选的。我添加它们只是为了显示查询是如何解析的:
SELECT
EXTRACTVALUE(definition_xml.COLUMN_VALUE, ...) AS domain_name
FROM
( SDE.GDB_ITEMS_VW i
JOIN
SDE.GDB_ITEMTYPES it
ON
i.Type = it.UUID
)
, -- or: CROSS JOIN
( TABLE(...) definition_xml
)
;
Run Code Online (Sandbox Code Playgroud)
* CROSS JOIN和逗号连接运算符具有不同的优先级,但这对于特定查询无关紧要。不过,作为一个好习惯,最好不要将逗号连接与显式连接混合在一起JOIN。
| 归档时间: |
|
| 查看次数: |
4752 次 |
| 最近记录: |