Выбор двух таблиц одновременно - PullRequest
0 голосов
/ 30 октября 2019

У меня пользователи и группы пользователей таблицы, подобные следующим:

пользователи

id - PK
name
timestamp

группы пользователей

user_1 - Foreign key to users id
user_2 - Foreign key to users id
user_3 - Foreign key to users id
type

У меня есть пользователь с идентификатором = 1. Я хочу выбрать все группы, которые объединяет этот пользователь, имя членов группы и тип группы пользователей . Могу ли я сделать это только одним запросом? Каков наилучший способ добиться этого?

Пример данных

пользователей

id - 1
name - Jeff

id - 2
name - Mehmet

id - 3
name - Walter

user_группы

user_1 - 1
user_2 - 2
user_3 - null
type - 1

user_1 - 1
user_2 - 2
user_3 - 3
type - 1

user_1 - 1
user_2 - 3
user_3 - null
type - 2

Как должен быть вывод:

[{
type: 1,
name: ["Jeff", "Mehmet"]
},

{
type: 1,
name: ["Jeff","Mehmet","Walter"]
},

{
type: 2,
name: ["Jeff", "Mehmet"]
}]

1 Ответ

1 голос
/ 30 октября 2019

Требуется несколько объединений и некоторые функции массива:

select ug.type,
       array_remove(array[u1.name, u2.name, u3.name], null)
from user_groups ug left join
     users u1
     on ug.user_1 = u1.id left join
     users u2
     on ug.user_2 = u2.id left join
     users u3
     on ug.user_3 = u3.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...