Oracle
逗號分隔連接(交叉連接)
我不明白這個查詢是如何工作的:
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
第 7 行開頭的逗號有什麼作用?
我的猜測是編寫查詢的人使用了某種 SQL 速記。也許如果有人可以幫助重新格式化“初學者 SQL”中的查詢,它可能會有所幫助。
逗號是隱式連接運算符,ANSI SQL-89 語法。與以下中的逗號沒有什麼不同:
select ... from a , b -- <-- this comma where a.aid = b.aid;
我認為您可以將其替換為
CROSS JOIN
*****,假設 Oracle 版本足夠新。
i
和是 3it
個連接表的definition_xml
別名(2 個表是基表或視圖,第 3 個表類似於派生表,Oracle 稱它們為“表集合表達式”),但它們在連接方式上沒有什麼不同或參考。連接和最後一個表周圍的括號是完全可選的。我添加它們只是為了顯示如何解析查詢:
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 ) ;
*****
CROSS JOIN
和逗號連接運算符具有不同的優先級,但這對於特定查詢無關緊要。不過,作為一種好的做法,最好不要將逗號連接與顯式混合JOIN
。