SQL Объединять таблицы по текстовому имени (а не по идентификатору) - PullRequest
0 голосов
/ 25 февраля 2020

Я хотел бы спросить вас, возможно ли объединить таблицы с полями имен, которые не являются первичными или внешними ключами? У меня есть конкретный пример:

My easy model

В этом примере у меня есть билеты, которые приходят из 2 разных приложений, и каждое приложение дает мне имя билета + имя пользователя в разных форматах (так невозможно сделать его уникальным идентификатором в таблице user_role).

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

SELECT ticket_created_app1.user_name, count(ticket_created_app1.id),u.main_name 
from user_roles u
LEFT JOIN u on u.name_2 like ticket_created_app1.user_name
group by ticket_created_app1.user_name,  u.main_name;

Как вы понимаете, я хочу, чтобы для каждого пользователя было создано количество билетов и показано основное_имя из user_roles.

Однако весь столбец u.main_name пуст.

1 Ответ

1 голос
/ 25 февраля 2020

Я хочу для каждого пользователя количество созданных билетов и показать основное имя из user_roles.

Вы можете присоединиться к двум совокупным запросам:

select 
    u.main_name, 
    coalesce(t1.cnt, 0) + coalesce(t2.cnt, 0) nb_tickets
from user_roles u
left join (
    select user_name, count(*) cnt
    from ticket_created_application1
    group by user_name
) t1 on t1.user_name = u.name2
left join (
    select user_name, count(*) cnt
    from ticket_created_application2
    group by user_name
) t1 on t1.user_name = u.name1

Если вам нужны цифры в двух разных столбцах, то:


select 
    u.main_name, 
    coalesce(t1.cnt, 0) nb_tickets1,
    coalesce(t2.cnt, 0) nb_tickets2
from ...


...