我正在使用 Oracle19c,并且我有下表存盤 json 陣列,如下所示:
CREATE TABLE "TEST_JSON2"
("JSON_DATA") as
select '["test1"]' from dual union all
select '["test1", "test2"]' from dual union all
select '["test2"]' from dual union all
select '["test3"]' from dual;
我想進行查詢以檢索包含陣列中“test1”和“test2”元素的行。
到目前為止,我已經通過以下查詢實作了它:
SELECT *
FROM TEST_JSON2
WHERE
JSON_EXISTS(json_data, '$?(@ == "test1")') AND
JSON_EXISTS(json_data, '$?(@ == "test2")');
我想知道是否可以對上述內容進行更多優化-例如,我在想類似下面的內容,但它沒有選擇包含兩個元素的陣列的行:
SELECT *
FROM TEST_JSON2
WHERE
JSON_EXISTS(json_data, '$?(@ == "test1" && @ == "test2")');
uj5u.com熱心網友回復:
您可以[*]顯式參考陣列元素并讓@參考包含陣列:
SELECT *
FROM TEST_JSON2
WHERE JSON_EXISTS(json_data, '$?(@[*] == "test1" && @[*] == "test2")')
其中,對于樣本資料,輸出:
JSON_DATA [“測驗1”,“測驗2”]
(注意:您的最終查詢被隱式轉換為JSON_EXISTS(json_data, '$[*]?(@ == "test1" && @ == "test2")')which 將不起作用,因為不可能有一個陣列元素同時等于"test1"和"test2"。)
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/432472.html
下一篇:如何從JSON陣列中提取資料
