在示例表中:
CREATE TABLE example (
id SERIAL PRIMARY KEY,
data JSON NOT NULL );
INSERT INTO example (id, data) VALUES
(1, '[{"key": "1", "value": "val1"}, {"key": "2", "value": "val2"}]')
, (2, '[{"key": "1", "value": "val1"}]')
, (3, '[{"key": "1", "value": "val1"}, {"key": "2", "value": "val2"}]');
Run Code Online (Sandbox Code Playgroud)
我想查询数据列中 key = 2 的值字段。我当前使用的查询是这样的:
SELECT id,
jsonb_path_query(
TO_JSONB(data),
'$[*] ? (@.key == "2").value'::JSONPATH
)::VARCHAR AS values
FROM example
Run Code Online (Sandbox Code Playgroud)
我期望结果是:
| ID | 价值观 |
|---|---|
| 1 | “值2” |
| 2 | 无效的 |
| 3 | “值2” |
但实际结果是:
| ID | 价值观 |
|---|---|
| 1 | “值2” |
| 3 | “值2” … |