Существует ли краткая форма json_build_object, если реквизиты имеют одинаковые имена? - PullRequest
0 голосов
/ 29 апреля 2020

Есть ли способ удалить части 'id' и 'email', если имена объектов совпадают с именами столбцов?

SELECT pu.project_id, json_build_object('id', u.id, 'email', u.email) AS user
      FROM projects_users pu 
      LEFT JOIN users u ON pu.user_id = u.id 
      WHERE project_id=1

Что-то вроде:

SELECT pu.project_id, json_build_object (u.id, u.email) AS user
      FROM projects_users pu 
      LEFT JOIN users u ON pu.user_id = u.id 
      WHERE project_id=1

1 Ответ

2 голосов
/ 29 апреля 2020

Если вы в порядке, получая все столбцы users в JSONB, вы можете использовать:

SELECT pu.project_id, to_jsonb(u) AS user
FROM projects_users pu 
  LEFT JOIN users u ON pu.user_id = u.id 
WHERE project_id=1

Если вы хотите удалить один или два ключа из этого, вы можете, например, использовать to_jsonb(u) - 'password_hash' - 'last_login'

В качестве альтернативы используйте производную таблицу, которая получает только нужные вам столбцы:

SELECT pu.project_id, to_jsonb(u) AS user
FROM projects_users pu 
  LEFT JOIN (
    select id, email
    from users
  ) u ON pu.user_id = u.id 
WHERE project_id = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...