PostgreSQL正在尝试选择json数组值
我将以下json数组存储在postgres db的一列中。我正在尝试编写一个查询,以按国家/地区名称获取所有行 查询将执行,但无法使其返回任何值 列名为PostgreSQL正在尝试选择json数组值,postgresql,Postgresql,我将以下json数组存储在postgres db的一列中。我正在尝试编写一个查询,以按国家/地区名称获取所有行 查询将执行,但无法使其返回任何值 列名为sources,属于json数组类型 示例值 [{ "name": "Albania", "type": "domain", "order": 2 },{ "name": "Samoa", "type": "domain", "order": 3 },{ "name": "United St
sources
,属于json数组类型
示例值
[{
"name": "Albania",
"type": "domain",
"order": 2
},{
"name": "Samoa",
"type": "domain",
"order": 3
},{
"name": "United States",
"type": "domain",
"order": 4
}]
以下是我正在尝试运行的查询:
SELECT * from my_table,
json_array_elements(sources->'name') elem
where elem->>'name' = 'Samoa';
尝试使用
EXISTS
和相关子查询
SELECT *
FROM my_table t
WHERE EXISTS (SELECT *
FROM json_array_elements(t.sources) jae (e)
WHERE jae.e->>'name' = 'Samoa');
尝试使用
EXISTS
和相关子查询
SELECT *
FROM my_table t
WHERE EXISTS (SELECT *
FROM json_array_elements(t.sources) jae (e)
WHERE jae.e->>'name' = 'Samoa');
你几乎说对了。问题是您太频繁地指定了一次“name”。源没有名为“name”的顶级键(因为它是一个数组,所以没有字符串键),因此会给出“null”,不能取消设置。因此:
SELECT * from my_table,
json_array_elements(sources) elem
where elem->>'name' = 'Samoa';
但是,如果您不需要将包含匹配项的特定元素作为单独的列,那么您可以使用containment操作符来完全删除连接
select * from my_table where sources::jsonb @> '[{"name":"Samoa"}]';
你几乎说对了。问题是您太频繁地指定了一次“name”。源没有名为“name”的顶级键(因为它是一个数组,所以没有字符串键),因此会给出“null”,不能取消设置。因此:
SELECT * from my_table,
json_array_elements(sources) elem
where elem->>'name' = 'Samoa';
但是,如果您不需要将包含匹配项的特定元素作为单独的列,那么您可以使用containment操作符来完全删除连接
select * from my_table where sources::jsonb @> '[{"name":"Samoa"}]';