例如,我有一个名为user的表,其中login列的类型为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
选择两者 '2020-01-01'
以及 '2020-01-02'
? 或者我只是使用,例如:
SELECT *
FROM "user"
WHERE "login" @> '{"byDate":[{"date": "2020-01-01"}]}'
OR "login" @> '{"byDate":[{"date": "2020-01-02"}]}'
我希望结果是一个或产品,例如:我使用 '2020-01-01'
或者 '2020-01-03'
两者 test1
以及 test2
将出现在结果中。
任何帮助都将不胜感激。
谢谢
2条答案
按热度按时间kuhbmx9i1#
一种选择是使用查询
jsonb_array_elements()
功能其中包含
IN
接线员。演示
xe55xuns2#
可以使用exists条件:
但是你的解决方案
@>
很可能会更有效率。