powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Множество join слить по одному полю
6 сообщений из 6, страница 1 из 1
Множество join слить по одному полю
    #39382167
Andrew B.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Как сделать чтобы для запроса ниже поля m1-m5 объединились в один столбец с уникальными значениями?

SELECT u.role_id, u.phone, u.email, u.first_name, u.second_name, u.third_name, u.login, u.password_hash, u.division_id, u.created_at::varchar, u.updated_at::varchar,
m1.id, m3.id, m4.id, m5.id
FROM users u
JOIN machines m1 ON m1.head_manager_id = u.id
JOIN machines m3 ON m3.operator_id = u.id
JOIN machines m4 ON m4.service_technician_id = u.id
JOIN machines m5 ON m5.manager_id = u.id

2. Как сделать чтобы при этом один из столбцов machines брался из Json вида: [1,2,3].
...
Рейтинг: 0 / 0
Множество join слить по одному полю
    #39382228
Andrew B.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пункт 1 получился так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT u.role_id, u.phone, u.email, u.first_name, u.second_name, u.third_name, u.login, u.password_hash, u.division_id, u.created_at::varchar, u.updated_at::varchar,
m.id
FROM users u
JOIN (SELECT ma1.head_manager_id as user_id, ma1.id FROM machines ma1
      UNION
      SELECT ma2.operator_id, ma2.id FROM machines ma2
      UNION
      SELECT ma3.service_technician_id, ma3.id FROM machines ma3
      UNION
      SELECT ma4.manager_id, ma4.id FROM machines ma4) m ON m.id = u.id



Я так понял что дублирования не будет (поправьте, если не прав).

Пункт 2 актуален.
...
Рейтинг: 0 / 0
Множество join слить по одному полю
    #39382423
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrew B.,

SELECT json_array_elements('[1,2,3]'::json) AS id если господин ПЖ хотябы 9.3...
...
Рейтинг: 0 / 0
Множество join слить по одному полю
    #39384005
Andrew B.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lonepsycho,

Как сделать вот это в одном запросе:
Код: plsql
1.
2.
3.
4.
5.
SELECT *
FROM machines m
JOIN users u4 ON u4.id = m.service_technician_id
JOIN user_roles ur4 ON ur4.id = u4.role_id
JOIN permissions p ON json_array_elements(ur4.permissions::json)::text::int = p.id



?
...
Рейтинг: 0 / 0
Множество join слить по одному полю
    #39384026
Andrew B.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrew B.,

Вот так работает, НО без p (на p ругается почему-то):
Код: plsql
1.
2.
3.
4.
5.
SELECT *
FROM permissions p, machines m
JOIN users u4 ON u4.id = m.service_technician_id
JOIN user_roles ur4 ON ur4.id = u4.role_id
JOIN json_array_elements(ur4.permissions::json) ur4p ON ur4p::text::int = 1
...
Рейтинг: 0 / 0
Множество join слить по одному полю
    #39384100
Andrew B.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrew B.,

Вот так работает, но не хотелось бы каждый раз определять permissions p

Код: plsql
1.
2.
3.
4.
5.
6.
SELECT *
FROM machines m
JOIN users u4 ON u4.id = m.service_technician_id
JOIN user_roles ur4 ON ur4.id = u4.role_id
JOIN json_array_elements(ur4.permissions::json) ur4p ON ur4p::text::int > 1
JOIN permissions p ON p.id = ur4p::text::int
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Множество join слить по одному полю
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]