Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Снова про JOIN / 16 сообщений из 16, страница 1 из 1
27.03.2015, 11:11
    #38918640
Снова про JOIN
Товарисчи!
Возник вопрос:
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
27.03.2015, 11:15
    #38918649
Wilhelm Holtoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова про JOIN
Большой Боб,

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

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

ты бросай курить бамбук.
...
Рейтинг: 0 / 0
27.03.2015, 11:21
    #38918670
Снова про JOIN
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
27.03.2015, 11:32
    #38918710
Wilhelm Holtoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова про JOIN
Большой Боб,

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

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

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

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

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

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

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

p.s. а все таки можно вытащить имена автора и исполнителя из запроса в начале темы без двойного джоина?
...
Рейтинг: 0 / 0
27.03.2015, 12:16
    #38918842
?Ы
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова про JOIN
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
27.03.2015, 12:20
    #38918849
а зачем?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова про JOIN
Большой Боббез двойного джоинаlateral на pivot
...
Рейтинг: 0 / 0
27.03.2015, 12:20
    #38918853
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова про JOIN
Большой БобIvan Durak,

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

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

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

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
27.03.2015, 12:21
    #38918854
Снова про JOIN
авторlateral на pivot
это что? я такое ещё не курил даже
...
Рейтинг: 0 / 0
27.03.2015, 12:27
    #38918865
Снова про JOIN
Большой Бобавтор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
27.03.2015, 12:29
    #38918870
ээээээ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова про JOIN
Большой БобIvan Durak,

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

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

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

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

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

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

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


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