针对多个值查询 Postgres 中的 jsonb 列
Query jsonb column in Postgres against multiple values
我的 PostgreSQL 数据库中有一个类型为 jsonb
的列 'carInfo',我希望能够查询多个值。我希望查询 return 只有那些符合所有条件的行。例如,如果我有多个列,我会这样写查询:
select *
from car
where name = 'BMW'
AND 'year' = 2020
因为我的专栏是 jsonb
类型,所以我可以像这样使用包含运算符 (@>):
select *
from car
where carInfo @> cast('{"name":"BMW"}') as jsonb
AND carInfo @> cast('{"year":"2020"}')
但我希望查询是动态的,以便用户可以通过他们想要的任何属性进行查询。
因此,他们将发送一个搜索词列表(在这种情况下,该列表的元素将是 {"name":"BMW"}
和 {"year":"2020"}
。
假设我有上面的列表,如果我想获得与使用 AND 运算符时相同的结果,查询会是什么样子?
我这样试过:
select *
from car
where carInfo @> any(array['{"name":"BMW"}', '{"year":"2020"}']::jsonb[])
但它的作用与使用 OR 运算符时相同。我需要找到包含两个搜索词的那些行
您可以使用 @> ALL
,但这个应该更好:
WHERE carInfo @> cast('{"name":"BMW", "year": "2020"}' as jsonb)
我的 PostgreSQL 数据库中有一个类型为 jsonb
的列 'carInfo',我希望能够查询多个值。我希望查询 return 只有那些符合所有条件的行。例如,如果我有多个列,我会这样写查询:
select *
from car
where name = 'BMW'
AND 'year' = 2020
因为我的专栏是 jsonb
类型,所以我可以像这样使用包含运算符 (@>):
select *
from car
where carInfo @> cast('{"name":"BMW"}') as jsonb
AND carInfo @> cast('{"year":"2020"}')
但我希望查询是动态的,以便用户可以通过他们想要的任何属性进行查询。
因此,他们将发送一个搜索词列表(在这种情况下,该列表的元素将是 {"name":"BMW"}
和 {"year":"2020"}
。
假设我有上面的列表,如果我想获得与使用 AND 运算符时相同的结果,查询会是什么样子?
我这样试过:
select *
from car
where carInfo @> any(array['{"name":"BMW"}', '{"year":"2020"}']::jsonb[])
但它的作用与使用 OR 运算符时相同。我需要找到包含两个搜索词的那些行
您可以使用 @> ALL
,但这个应该更好:
WHERE carInfo @> cast('{"name":"BMW", "year": "2020"}' as jsonb)