在https://oracle-base.com/articles/19c/sql-nested-clause-instead-of-json_table-19c中
以下查询
SELECT j.id, jt.first_name, jt.last_name, jt.job, jt.email, jt.phone, jt.active
FROM json_documents j,
JSON_TABLE(j.data, '$'
COLUMNS (first_name VARCHAR2(50 CHAR) PATH FirstName,
last_name VARCHAR2(50 CHAR) PATH LastName,
job VARCHAR2(10 CHAR) PATH Job,
email VARCHAR2(100 CHAR) PATH ContactDetails.Email,
phone VARCHAR2(50 CHAR) PATH ContactDetails.Phone,
active VARCHAR2(5 CHAR) PATH Active)) jt;
表示两个表json_documents
和jt
是内连接。在这个网站上,它提到上面的查询相当于下面的查询:
SELECT j.id, jt.first_name, jt.last_name, jt.job, jt.email, jt.phone, jt.active
FROM json_documents j JOIN
JSON_TABLE(j.data, '$'
COLUMNS (first_name VARCHAR2(50 CHAR) PATH FirstName,
last_name VARCHAR2(50 CHAR) PATH LastName,
job VARCHAR2(10 CHAR) PATH Job,
email VARCHAR2(100 CHAR) PATH ContactDetails.Email,
phone VARCHAR2(50 CHAR) PATH ContactDetails.Phone,
active VARCHAR2(5 CHAR) PATH Active)) jt ON 1=1;
但我不明白它们是如何连接的!在哪里join column
以及是什么意思1=1
逗号连接相当于 ANSI
CROSS JOIN
:A与没有连接过滤器
CROSS JOIN
的相同:INNER JOIN
没有连接列,因为连接是
CROSS JOIN
而不是INNER JOIN
。1=1
用于为连接提供始终为真的条件,从而有效地将其转换JOIN
回,CROSS JOIN
因为每行组合都将匹配过滤器。从技术上讲,有一列将 连接
JSON_TABLE
到驱动表作为JSON_TABLE
用途j.data
- 虽然它不在条件中JOIN
,但它嵌入在 中JSON_TABLE
。从 Oracle 12 及更高版本开始,您可以等效地使用:
或者:
这两个查询的语法表明这
json_documents
是驱动表,并且JSON_TABLE
应用于驱动表的每一行。