Oracle JSON 数组查询
Oracle JSON Array query
我的版本:Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
CREATE TABLE DUMMY1 (id int NOT NULL PRIMARY KEY, doc1 VARCHAR2 (200) , doc2 VARCHAR2 (200), CONSTRAINT dummy_json1 CHECK (doc1 IS JSON) , CONSTRAINT dummy_json2 CHECK (doc2 IS JSON));
INSERT INTO DUMMY1 VALUES (1, '["12345", "23456", "34567"]', '["ABCD", "EFGH"]’);
select ID, t1.*, t2.* from DUMMY1 d,
json_table(d.doc1, '$[*]'
columns (x VARCHAR2(10) PATH '$')) t1, json_table(d.doc2, '$[*]'
columns (x VARCHAR2(10) PATH '$')) t2 WHERE t1.x = ‘12345' AND t2.x='EFGH’;
Returns一条记录
select ID, t1.*, t2.* from DUMMY1 d, json_table(d.doc1, '$[*]'
columns (x VARCHAR2(10) PATH '$')) t1, json_table(d.doc2, '$[*]'
columns (x VARCHAR2(10) PATH '$')) t2 WHERE t1.x = '23456' AND t2.x='EFGH’;
Returns 没有行。
select ID, t1.*, t2.* from DUMMY1 d, json_table(d.doc1, '$[*]'
columns (x VARCHAR2(10) PATH '$')) t1, json_table(d.doc2, '$[*]'
columns (x VARCHAR2(10) PATH '$')) t2;
Returns:
ID X X
---------- ---------- ----------
1 12345 ABCD
1 12345 EFGH
1 23456 ABCD
1 23456 EFGH
1 34567 ABCD
1 34567 EFGH
我错过了什么吗?
我想做的是
我有一个 table,其中 2 列是 JSON 数组,我想 return 一个结果,其中 2 个给定值存在于 JSON 数组中,有没有更好的如何做到这一点? (因为我做的方式是cross join)
我会避免叉积并使用类似下面的东西...
SELECT id
FROM dummy1
WHERE json_exists (
doc1,
'$[*]?(@ == "23456")')
AND json_exists (
doc2,
'$[*]?(@ == "EFGH")');
我的版本:Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
CREATE TABLE DUMMY1 (id int NOT NULL PRIMARY KEY, doc1 VARCHAR2 (200) , doc2 VARCHAR2 (200), CONSTRAINT dummy_json1 CHECK (doc1 IS JSON) , CONSTRAINT dummy_json2 CHECK (doc2 IS JSON));
INSERT INTO DUMMY1 VALUES (1, '["12345", "23456", "34567"]', '["ABCD", "EFGH"]’);
select ID, t1.*, t2.* from DUMMY1 d,
json_table(d.doc1, '$[*]'
columns (x VARCHAR2(10) PATH '$')) t1, json_table(d.doc2, '$[*]'
columns (x VARCHAR2(10) PATH '$')) t2 WHERE t1.x = ‘12345' AND t2.x='EFGH’;
Returns一条记录
select ID, t1.*, t2.* from DUMMY1 d, json_table(d.doc1, '$[*]'
columns (x VARCHAR2(10) PATH '$')) t1, json_table(d.doc2, '$[*]'
columns (x VARCHAR2(10) PATH '$')) t2 WHERE t1.x = '23456' AND t2.x='EFGH’;
Returns 没有行。
select ID, t1.*, t2.* from DUMMY1 d, json_table(d.doc1, '$[*]'
columns (x VARCHAR2(10) PATH '$')) t1, json_table(d.doc2, '$[*]'
columns (x VARCHAR2(10) PATH '$')) t2;
Returns:
ID X X
---------- ---------- ----------
1 12345 ABCD
1 12345 EFGH
1 23456 ABCD
1 23456 EFGH
1 34567 ABCD
1 34567 EFGH
我错过了什么吗?
我想做的是 我有一个 table,其中 2 列是 JSON 数组,我想 return 一个结果,其中 2 个给定值存在于 JSON 数组中,有没有更好的如何做到这一点? (因为我做的方式是cross join)
我会避免叉积并使用类似下面的东西...
SELECT id
FROM dummy1
WHERE json_exists (
doc1,
'$[*]?(@ == "23456")')
AND json_exists (
doc2,
'$[*]?(@ == "EFGH")');