【发布时间】:2023-04-07 17:30:01
【问题描述】:
我在订单表中有一个 JSONB 列数据:
# orders.data
{
discount_codes: [
{ code: 'foo' },
{ code: 'bar'}
]
}
# codes_array: ['foo', 'bar', 'baz']
我正在尝试选择“discount_codes 包含codes_array 中的代码的订单”。我不知道如何准确地编写这个查询。我了解了 [*] 运算符,但不确定如何在这种情况下使用它。
这只会搜索 discount_codes 的第一个元素:
SELECT *
FROM ORDERS
WHERE data->'discount_codes'->0->'code' ?| array['foo','bar','baz']
这只会搜索“foo”。
SELECT *
FROM ORDERS
WHERE data @@ '$.discount_codes[*].code == "foo"'
我一直在阅读文档https://www.postgresql.org/docs/12/functions-json.html#FUNCTIONS-SQLJSON-PATH,但我有点迷茫。
【问题讨论】:
标签: sql json postgresql jsonb