powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Снова про JOIN
16 сообщений из 16, страница 1 из 1
Снова про JOIN
    #38918640
Товарисчи!
Возник вопрос:
1) Есть таблица юзеров users

idname
у каждого юзера есть айдишник и имя

2) Есть таблица задач issues

idnameauthor_idassigned_to_id
у которой есть айдишник, название, и ещё два поля - author_id - кто автор (ссылка на айдишник юзера) и assigned_to_id - на кого назначена (ссылка на айдишник юзера)

предположим, мне надо вытащить в резудьтате запроса имя автора и исполнителя, правильно ли будет сделать такой запрос

Код: plsql
1.
2.
3.
4.
5.
6.
select i.id, i.name, author.name, assigned.name from issues as i
join issues as author
  on i.author_id = author.id
join issues as assigned
  on i.assigned_to_id = assigned_to.id
where i.id = 1



или делать два джоина это не правильно, и можно сделать как нибудь ещё?
...
Рейтинг: 0 / 0
Снова про JOIN
    #38918649
Фотография Wilhelm Holtoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Боб,

ты сам вкурил, чё ты написал ?

... issues ... join issues ... join issues

ты бросай курить бамбук.
...
Рейтинг: 0 / 0
Снова про JOIN
    #38918670
Wilhelm Holtoff,

каюсь, сам увидел как накосячил, но нет возможности отредактировать своё сообщение :)

ладно, скопипащу свой запрос )
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT
  i.id AS id,
  subject,
  s.name AS status_name,
  s.id AS status_id,
  i.assigned_to_id AS assigned_to_id,
  Concat(u.lastname, ' ', u.firstname, ' ', u.middlename) AS assigned_to,
  i.author_id AS author_id,
  Concat(a.lastname, ' ', a.firstname, ' ', a.middlename) AS author,
  i.due_date,
  i.start_date
FROM issues AS i 
JOIN issue_statuses AS s 
  ON s.id=i.status_id 
JOIN users AS u
  ON i.assigned_to_id=u.id
JOIN users AS a
  ON i.author_id=a.id
JOIN projects AS p
  ON i.project_id=p.id
WHERE 
  i.id = 12345;
...
Рейтинг: 0 / 0
Снова про JOIN
    #38918710
Фотография Wilhelm Holtoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Боб,

Вощем, слухай сюда, Бобби

Ничё плохого нету в том, чтобы два раза соединиться с табличкой users.
Это - нормально.
...
Рейтинг: 0 / 0
Снова про JOIN
    #38918721
?Ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой Боб,

а погчему ви спгашиваити ?

PS в нормальном общем случае -- добавьте LEFT к джойнам на nullable справочники (или если не пользуетесь ФК, закладываясь на выверенность логики приложения) -- оно не помешает
...
Рейтинг: 0 / 0
Снова про JOIN
    #38918819
Wilhelm Holtoff,

А если мне в одной табличке надо будет 20 айдишников юзеров хранить?
Это что получается, 20 раз придётся сделать джоин?)
...
Рейтинг: 0 / 0
Снова про JOIN
    #38918823
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой БобWilhelm Holtoff,

А если мне в одной табличке надо будет 20 айдишников юзеров хранить?
Это что получается, 20 раз придётся сделать джоин?)
если 20 - сделаешь линковочную таблицу, аля М-М. там будет 20 записей с двумя ссылками.
...
Рейтинг: 0 / 0
Снова про JOIN
    #38918838
Ivan Durak,

это да, чего то я ответил не подумав)

p.s. а все таки можно вытащить имена автора и исполнителя из запроса в начале темы без двойного джоина?
...
Рейтинг: 0 / 0
Снова про JOIN
    #38918842
?Ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan Durak,
есть хардкорный special PG--вориант: ids == ARRAY[id]
c
Код: sql
1.
,ARRAY(SELECT u.name FROM  users u WHERE u.id = ANY(ids) ) AS piople


шутка.

хотя и в вашем случае не хватает роли. в кросс табличке.
...
Рейтинг: 0 / 0
Снова про JOIN
    #38918849
а зачем?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой Боббез двойного джоинаlateral на pivot
...
Рейтинг: 0 / 0
Снова про JOIN
    #38918853
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой БобIvan Durak,

это да, чего то я ответил не подумав)

p.s. а все таки можно вытащить имена автора и исполнителя из запроса в начале темы без двойного джоина?

можно но ненужно :) 2 подзапроса вместо join

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Снова про JOIN
    #38918854
авторlateral на pivot
это что? я такое ещё не курил даже
...
Рейтинг: 0 / 0
Снова про JOIN
    #38918865
Большой Бобавторlateral на pivot
это что? я такое ещё не курил дажеlateral найдешь в доке, а пивот эмулируется max/min filter
Код: sql
1.
2.
3.
4.
5.
6.
join lateral (select 
   max(name) filter(where id = users.author_id) имя_автора,
   max(name) filter(where id = users.assigned_to_id) имя_ассигнеда
from users
where id in (users.author_id, users.assigned_to_id)
)
...
Рейтинг: 0 / 0
Снова про JOIN
    #38918870
ээээээ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой БобIvan Durak,

это да, чего то я ответил не подумав)

p.s. а все таки можно вытащить имена автора и исполнителя из запроса в начале темы без двойного джоина?

как бы это помягшее.

декларация отличается от инструкции.
чем-то, эээээ
т.е. длина декларации, как предложения вас не должна волновать. Должна волновать её внятность.

а с т.з инструкций -- вам именно 20 раз искать надо -- т.ч. нивапрос.

напишите STABLE sql ф-ю, реализующую коррелят -- будет примерно то же в смысле планов.
...
Рейтинг: 0 / 0
Снова про JOIN
    #38918960
Фотография grufos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где эта барышня,
где эта барышняlateral найдешь в доке, а пивот эмулируется max/min filter

для pivot функционала в postgres есть расширение:
CREATE EXTENSION tablefunc;
ссылка на RTFM
http://www.postgresql.org/docs/9.4/static/tablefunc.html
...
Рейтинг: 0 / 0
Снова про JOIN
    #38919007
grufosдля pivot функционала в postgres есть расширениеПоделку через текстуализацию sql, если бы не известность автора, приняли бы за студенческую лабораторную работу и в дистрибутив не включили. Впрочем, postgresql и без этого хромой на позднее связывание в погоне за чужими фичами.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Снова про JOIN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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