首页 > 解决方案 > 文本名称上的 SQL 连接表(而不是按 id)

问题描述

我想问你是否可以通过非主键或外键的名称字段加入表?我有一个具体的例子:

我的简易模型

在此示例中,我有来自 2 个不同应用程序的票证,每个应用程序都以不同格式给我票证名称 + 用户名(因此不可能使其成为 user_role 表中的唯一 ID)。

我目前的要求是这样的:

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 的 main_name。

但是,所有列 u.main_name 都是空的。

标签: sqlpostgresqljoingroup-by

解决方案


我想为每个用户创建票证的数量并显示来自 user_roles 的 main_name。

您可以离开加入两个聚合查询:

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 ...



推荐阅读