Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Как приравнять ID двух столбцов в одной таблицы к ID одного столбца в другой таблице?  [new]
DeLipFin
Member

Откуда:
Сообщений: 25
Добрый день
есть запрос, суть в том что я объединил ticket.user_id c users.id. Вывожу столбец ticket.user_id и приравниваю к id соответствующие имена с фамилией
case when ticket.user_id=(users.id) then (users.first_name || ' ' || users.last_name) end as Владелец,


Но нужно добавить еще столбец в результат запроса ticket.responsible_user_id. Сделал аналогично с выше кодом
case when ticket.responsible_user_id=(users.id) then (users.first_name || ' ' || users.last_name) end as Ответственный,


Но результат выходит такой: если владелец и ответственный соответствуют то в обоих случаях пишется имя и фамилия, а если же
они разные то он пишет [null] в любом столбце, пример во вложении.

Пришел к выводу это связано из-за того что я связал ticket.user_id c users.id, а ticket.responsible_user_id c users.id не связал.
Как можно приравнять users.id с ticket.user_id и ticket.responsible_user_id

SELECT ticket.tn AS Номер_заявки, ticket_type.name as Тип, queue.name as Очередь, service.name as Сервис,
split_part(article_data_mime.a_from,'"', 2) as Клиент, article_data_mime.a_subject AS Заголовок, article_data_mime.a_body AS Описание,
ticket_priority.name as Приоритет, ticket_state.name as Статус, qFields.sIPADDR as IP, qFields.sPhone as Телефон, qFields.sFilial as Филиал,
case when ticket.user_id=(users.id) then (users.first_name || ' ' || users.last_name) end as Владелец,
case when ticket.responsible_user_id=(users.id) then (users.first_name || ' ' || users.last_name) end as Ответственный,
ticket.create_time as Время_создания, ticket.change_time as Время_последнего_изменения

FROM article_data_mime
JOIN article 			ON (article_data_mime.article_id=article.id AND (article_data_mime.a_to in ('1я линия техподдержки', 'Raw', 'Junk', 'Misc', '2я линия', '2я линия::Телеком', '2я линия::ПК ПВД', '2я линия::АИС Мои документы', '2я линия::АИС ЕЦУ', '3я линия', '3я линия::АИС Мои документы', '2я линия::ИБ', '2я линия::СКУД', '2я линия::Видеонаблюдение', 'Кадровый учет', '2я линия::ЭО', 'Монтаж', 'Претензионная работа', 'Кадастровые услуги', 'Кадастровые услуги::Межевание земельных участков', 'Кадастровые услуги::Изготовление технического  плана', 'Кадастровые услуги::Постановка на учет земельного участка и объекта', 'Запрос на выпуск ЭЦП', 'Запрос на выпуск ЭЦП::Готовые к выпуску ЭЦП', '1я линия техподдержки::Рассмотренные', '2я линия::АИС Мои документы::Настройка окон', '2я линия::Сбербанк', '2я линия::АИС Мои документы::Согласование с МОД. Изменение статистики')))
JOIN ticket 			ON (article.ticket_id=ticket.id and (ticket.create_time between '2020-06-05 00:00:00' and '2020-06-05 24:00:00'))
JOIN users 				ON (ticket.user_id=users.id)
JOIN service 			ON (ticket.service_id=service.id)
JOIN ticket_state		ON (ticket.ticket_state_id=ticket_state.id)
JOIN ticket_priority	ON (ticket.ticket_priority_id=ticket_priority.id)
JOIN queue 				ON (ticket.queue_id=queue.id)
JOIN ticket_type		ON (ticket.type_id=ticket_type.id)
					   	INNER JOIN LATERAL
					   
  (SELECT dynamic_field_value.Object_id,
          max(CASE WHEN field_id = 11 THEN value_Text END) sIPADDR,
          max(CASE WHEN field_id = 4 THEN value_Text END) sPhone,
          max(CASE WHEN field_id = 3 THEN (case value_Text 
when '01' then 'Центральный офис'		when '02' then 'Интернациональная'			when '03' then 'ТЦ Башкортостан'	when '04' then 'Бизнес зал 50 лет СССР'
when '05' then 'Инорс'					when '06' then 'Сипайлово'					when '07' then 'Дема'				when '08' then 'ХБК'
when '09' then 'Рыльского'				when '10' then 'Аркада'						when '11' then 'Агидель'			when '12' then 'Баймак'
when '13' then 'Бирск'					when '14' then 'Благовещенск'				when '15' then 'Давлеканово'		when '16' then 'Дюртюли'
when '17' then 'Стерлитамак Мира'		when '18' then 'Стерлитамак'				when '19' then 'Учалы'				when '20' then 'Янаул'
when '21' then 'Межгорье'				when '22' then 'Приютово'					when '23' then 'Чишмы'				when '24' then 'Акъяр'
when '25' then 'Архангельское'			when '26' then 'Аскарово'					when '27' then 'Аскино'				when '28' then 'Бакалы'
when '29' then 'Бижбуляк'				when '30' then 'Большеустьикинское'			when '31' then 'Буздяк'				when '32' then 'Бураево'
when '33' then 'Верхнеяркеево'			when '34' then 'Верхние Киги'				when '35' then 'Верхние Татышлы'	when '36' then 'Ермекеево'
when '37' then 'Ермолаево'				when '38' then 'Зилаир'						when '39' then 'Иглино'				when '40' then 'Исянгулово'
when '41' then 'Калтасы'				when '42' then 'Караидель'					when '43' then 'Кармаскалы'			when '44' then 'Киргиз-Мияки'
when '45' then 'Красная Горка'			when '46' then 'Красноусольский'			when '47' then 'Кушнаренково'		when '48' then 'Малояз'
when '49' then 'Мишкино'				when '50' then 'Мраково'					when '51' then 'Николо-Березовка'	when '52' then 'Новобелокатай'
when '53' then 'Раевский'				when '54' then 'Старобалтачево'				when '55' then 'Старосубхангулово'	when '56' then 'Стерлибашево'
when '57' then 'Толбазы'				when '58' then 'Федоровка'					when '59' then 'Чекмагуш'			when '60' then 'Шаран'
when '61' then 'Языково'				when '62' then 'Белебей'					when '63' then 'Белорецк'			when '64' then 'Ишимбай'
when '65' then 'Кумертау'				when '66' then 'Мелеуз'						when '67' then 'Нефтекамск'			when '68' then 'Октябрьский'
when '69' then 'Салават'				when '70' then 'Сибай'						when '71' then 'Филиал Стерлитамак'	when '72' then 'Туймазы'
when '73' then 'Месягутово'				when '74' then 'Мир'						when '75' then 'Миграционный центр'	when '77' then 'Шакша'
when '78' then 'Октябрьский Горького'	when '82' then 'Нефтекамск Социалистическая'when '84' then 'Бизнес зал Мира 14' end) END) sFilial 
   FROM dynamic_field_value
   WHERE dynamic_field_value.Object_id = ticket.id
     AND field_id IN (11, 4, 3)
  
GROUP BY dynamic_field_value.Object_id) qFields ON qFields.Object_id = ticket.id
Order by 1
5 июн 20, 16:01    [22146470]     Ответить | Цитировать Сообщить модератору
 Re: Как приравнять ID двух столбцов в одной таблицы к ID одного столбца в другой таблице?  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4170
DeLipFin,

учите sql
просто еще один join с users нужен по ticket.responsible_user_id
5 июн 20, 16:13    [22146486]     Ответить | Цитировать Сообщить модератору
 Re: Как приравнять ID двух столбцов в одной таблицы к ID одного столбца в другой таблице?  [new]
DeLipFin
Member

Откуда:
Сообщений: 25
Maxim Boguk,

Вас не смущает, что уже была связь с таблицей users и ticket

пытался как бы так сделать вот результат

ERROR: table name "ticket" specified more than once
SQL-состояние: 42712
ERROR: table name "users" specified more than once
SQL-состояние: 42712

и да я тупой монуалы не читаю, учусь на примерах только
5 июн 20, 17:23    [22146523]     Ответить | Цитировать Сообщить модератору
 Re: Как приравнять ID двух столбцов в одной таблицы к ID одного столбца в другой таблице?  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4170
DeLipFin,

Тут не мануал нужен а тонкий учебник по основам sql.

join users as u1 on ...
join users as u2 on ...
5 июн 20, 17:58    [22146539]     Ответить | Цитировать Сообщить модератору
 Re: Как приравнять ID двух столбцов в одной таблицы к ID одного столбца в другой таблице?  [new]
DeLipFin
Member

Откуда:
Сообщений: 25
Maxim Boguk,

Я дико извиняюсь, но не могли бы на примере таблиц из скриншота написать запрос

Select ticket.tn, ticket.title, 
case when ticket.user_id=user.id then (users.first_name || ' ' || users.last_name) end,
case when ticket.responsible_user_id=users.id then (users.first_name || ' ' || users.last_name)

(Ниже я не знаю как написать правильно, написал для удобства, чтобы можно было скопировать и отредактировать )
from ticket
join ......on (users.id=ticket.user_id)
join ......on (user_id=ticket.responsible_user_id)


К сообщению приложен файл. Размер - 9Kb
8 июн 20, 09:20    [22147293]     Ответить | Цитировать Сообщить модератору
 Re: Как приравнять ID двух столбцов в одной таблицы к ID одного столбца в другой таблице?  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4170
DeLipFin,

Вы хотите чтобы участники форма за свой счет и за свое время вас учили SQL а самому прочесть учебник вам явно лень.
Вам не кажется что это как минимум самонадеянно?

Select ticket.tn, ticket.title, 
u1.first_name || ' ' || u1.last_name,
u2.first_name || ' ' || u2.last_name

(Ниже я не знаю как написать правильно, написал для удобства, чтобы можно было скопировать и отредактировать )
from ticket
JOIN users AS u1 ON (u1.id=ticket.user_id)
JOIN users AS u2 ON (u2.id=ticket.responsible_user_id)


Сообщение было отредактировано: 8 июн 20, 11:45
8 июн 20, 11:08    [22147350]     Ответить | Цитировать Сообщить модератору
 Re: Как приравнять ID двух столбцов в одной таблицы к ID одного столбца в другой таблице?  [new]
DeLipFin
Member

Откуда:
Сообщений: 25
Maxim Boguk,

Спасибо за помощь, все получилось
8 июн 20, 12:54    [22147408]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить