簡體   English   中英

Postgres jsonb object IN json 對象數組

[英]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' test1test2都會出現在結果中。

任何幫助將非常感激。

謝謝

您可以使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM