【问题标题】:Oracle JSON Array queryOracle JSON 数组查询
【发布时间】:2018-10-17 00:11:29
【问题描述】:

我的版本: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’;

返回一条记录

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’;

不返回任何行。

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;

返回:

    ID X          X
---------- ---------- ----------
     1 12345      ABCD
     1 12345      EFGH
     1 23456      ABCD
     1 23456      EFGH
     1 34567      ABCD
     1 34567      EFGH

我错过了什么吗?

我想做的是 我有一个表,其中 2 列是 JSON 数组,我想返回一个结果,其中 2 个给定值存在于 JSON 数组中,有没有更好的方法来做到这一点? (因为我的做法是交叉连接)

【问题讨论】:

    标签: json oracle jsonpath json-query


    【解决方案1】:

    我会避免交叉产品并使用类似以下的东西......

    SELECT id
    FROM   dummy1
    WHERE  json_exists (
              doc1,
              '$[*]?(@ == "23456")')
    AND    json_exists (
              doc2,
              '$[*]?(@ == "EFGH")');
    

    【讨论】:

    • 谢谢,@Padders,这听起来像是一个更好的方法!但是我在您提供的查询中遇到了 JSON PATH 错误,我不熟悉 json 路径,有人可以对 json 路径的正确语法有所了解吗?
    • 刚刚意识到Oracle 12.1 不支持json-path 语法'$[*]?(@ == "23456")',它是12.2 之后的支持。 :(
    • 它在 Oracle Database 12c 企业版版本 12.1.0.2.0 - 64 位生产中为我工作,这可能与标准版有关吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2021-07-15
    • 1970-01-01
    相关资源
    最近更新 更多