このクエリのしくみがわかりません。
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
、it
およびdefinition_xml
は、3つの結合されたテーブルのエイリアスです(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
を混在させないことをお勧めします。