sql—同一个表上有多个联接,如果联接字段为null,则不返回结果

kuuvgm7e  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(344)
SELECT organizations_organization.code as organization,
core_user.email as Created_By,
assinees.email as Assigned_To,
from tickets_ticket 
JOIN organizations_organization on tickets_ticket.organization_id = organizations_organization.id
JOIN core_user on tickets_ticket.created_by_id  = core_user.id 
Left JOIN core_user as assinees on assinees.id = tickets_ticket.currently_assigned_to_id

在上面的查询中,如果tickets\u ticket.currently\u assigned \u to \u id为null,则不会返回tickets\u ticket中的那一行

> Records In tickets_ticket = 109
> Returned Records = 4 (out of 109 4 row has value for currently_assigned_to_id  rest 105 are null )
> Expected Records = 109 (with nulll set for  Assigned_To)

注意,我试图在同一个表上实现多个连接

mdfafbf1

mdfafbf11#

左连接不能杀死输出记录,您的问题是:

JOIN core_user on tickets_ticket.created_by_id = core_user.id

此联接将删除不匹配的记录,请重试

LEFT JOIN core_user on tickets_ticket.created_by_id = core_user.id
oalqel3c

oalqel3c2#

首先,这不是您正在运行的实际代码。前面有一个逗号 from 会导致语法错误的子句。如果你漏掉了一个 where 子句,那么这就解释了为什么看不到行。
使用时 left join s、 第一张table上的条件 where 条款。下表中的条件 on 条款。
也就是说,一个 where 条款可能不是问题所在。我建议使用 left join 从第一个表开始的s—以及表别名:

select oo.code as organization, cu.email as Created_By, a.email as Assigned_To,
from tickets_ticket tt left join
     organizations_organization oo
     on tt.organization_id = oo.id left join
     core_user cu
     on tt.created_by_id = cu.id left join
     core_user a
     on a.id = tt.currently_assigned_to_id ;

我怀疑您的数据模型中有出乎意料的数据——可能是坏的组织,可能是坏的 created_by_id . 保留所有的票,看看少了什么。
也就是说,你应该包括 tt.id 在结果集中标识特定的票证。

相关问题