У меня есть таблица, созданная по следующему запросу:
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"}] |
+----+-------+---------------------------------------------+
Мне нужно получить строки 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 |
+----+----------+