Oracle

逗號分隔連接(交叉連接)

  • April 22, 2017

我不明白這個查詢是如何工作的:

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

引用自:https://dba.stackexchange.com/questions/153619