【发布时间】:2020-05-26 02:19:38
【问题描述】:
我有一个通过以下查询创建的表:
create table data
(
id integer not null unique,
owner text,
users jsonb not null
);
表格如下所示:
+----+-------+---------------------------------------------+
| id | owner | users |
+----+-------+---------------------------------------------+
| 1 | alice | [] |
| 2 | bob | [{"accountId": "alice", "role": "manager"}] |
| 3 | john | [{"accounId": "bob", "role": "guest"}] |
+----+-------+---------------------------------------------+
我需要代表 Alice 获取第 1 行和第 2 行。
获取基于所有者的行非常完美:
SELECT *
FROM data
WHERE owner = 'alice'
获取基于 jsonb 的行虽然可以管理,但有点棘手:
SELECT *
FROM data, jsonb_array_elements(users) x
WHERE (x ->> 'accountId') = 'alice'
但是将它们放在一起得到的只是基于 jsonb 的:
SELECT *
FROM data, jsonb_array_elements(users) x
WHERE owner = 'alice' OR (x ->> 'accountId') = 'alice'
如何获得如下所示的选择?
+----+-------+---------------------------------------------+
| id | owner | users |
+----+-------+---------------------------------------------+
| 1 | alice | [] |
| 2 | bob | [{"accountId": "alice", "role": "manager"}] |
+----+-------+---------------------------------------------+
如果我能得到一个看起来像这样的选择就更好了
+----+----------+
| id | role |
+----+----------+
| 1 | owner |
| 2 | manager |
+----+----------+
【问题讨论】:
标签: sql arrays json postgresql where-clause