我有一個表,其中包含一個包含陣列欄位的 json 列,我想檢查陣列中的數字是否屬于一個范圍,即每個元素是否通過謂詞大于 X 且小于 Y,
select nom.id, nom.doc
from nom
join json_each(nom.doc, "$.rate") e
where e.value > 0 and e.value < 7
我希望這能作業,但它沒有,我知道 json_each 回傳一個表,我想也許使用分組或聚合我可以得到我想要的,但我想知道是否有另一種方法,我想不依賴聚合,例如我想要檢查是否所有元素都通過謂詞,例如,如果所有元素都大于 X,或者如果我在哪里使用字串,它們是否都匹配模式等。
樣本資料:
id: 1, doc: {rate: [1, 2, 3]}
id: 2, doc: {rate: [1, 2, 3, 5 9]}
如果我有這兩條記錄,我想獲得那些比率值小于 7 和大于 0 的記錄,例如,id 為 2 的記錄不應該出現在我想要的查詢中。
uj5u.com熱心網友回復:
一種方法是提取 CTE 中陣列的所有值,并NOT EXISTS在主查詢中使用以檢查某個特定值的所有值是否id通過謂詞:
WITH cte AS (
SELECT n.id, n.doc, e.value
FROM nom n JOIN json_each(n.doc, "$.rate") e
)
SELECT n.id, n.doc
FROM nom n
WHERE NOT EXISTS (
SELECT 1
FROM cte c
WHERE c.id = n.id AND NOT <your predicate>
);
更改<your predicate>為:
(c.value > 0 AND c.value < 7)
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/469044.html
