[英]Postgres jsonb object IN array of json objects
例如,我有一個名為 user 的表,其登錄列為 jsonb 類型,記錄如下所示:
user
name | login
-------------
test1 | {"byDate":[{"date":"2020-01-01"},{"date":"2020-01-02"},{"date":"2020-01-03"},]}
test2 | {"byDate":[{"date":"2020-01-02"},{"date":"2020-01-03"},{"date":"2020-01-04"},]}
我如何SELECT
(帶有WHERE
子句)同時包含日期'2020-01-01'
和'2020-01-02'
?
對於一個日期,我可以這樣做:
SELECT *
FROM "user"
WHERE "login" @> '{"byDate":[{"date": "2020-01-01"}]}'
我可以使用某種IN
到 select '2020-01-01'
和'2020-01-02'
嗎? 還是我只使用 OR,例如:
SELECT *
FROM "user"
WHERE "login" @> '{"byDate":[{"date": "2020-01-01"}]}'
OR "login" @> '{"byDate":[{"date": "2020-01-02"}]}'
我希望結果是 OR 產品,例如:我使用'2020-01-01'
OR '2020-01-03'
test1
和test2
都會出現在結果中。
任何幫助將非常感激。
謝謝
您可以使用 EXISTS 條件:
select *
from the_table
where exists (select *
from jsonb_array_eleements(login -> 'byDate') as x(d)
where x.d ->> 'date' in ('2020-01-01', '2020-01-02))
但是您使用@>
的 OR 解決方案很可能會更有效。
一種選擇是使用帶有jsonb_array_elements()
function 的查詢
SELECT DISTINCT u.*
FROM "user" u
CROSS JOIN jsonb_array_elements(login->'byDate') j
WHERE j->>'date' IN ('2020-01-01','2020-01-02')
其中包含IN
運算符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.