gpt4 book ai didi

MySQL 想要左表中的所有结果,并仅使用条件过滤右表

转载 作者:行者123 更新时间:2023-11-29 17:12:04 25 4
gpt4 key购买 nike

假设我有票表:

工单表:

t_id,评论

ticket_detail 的表格:t_detail_id、t_id、注释、tech_viewed

我想这样做,

select
T.t_id as 'TicektID',
TK.tk_category as 'Category',
ifnull(T.contact_person,'N/A') as 'Contact_Person',
T.comment as 'Employee Comment',
COUNT(TD.t_detail_id) as 'User Comment',
T.t_status
from sun_it_tickets T
LEFT JOIN (
SELECT * from sun_it_ticket_categories
)TK ON TK.tk_id = T.tk_id
LEFT JOIN sun_it_tickets_detail TD ON TD.t_id = T.t_id
where TD.tech_viewed = 0
ORDER BY T.submit_time

其他表也左连接(忽略它)。

我想要的是“sun_it_tickets_detail”表中 tech_viewed = 0 的行数。

这只会返回仅与 tech_viewed = 0 匹配的行,但我希望其他结果也为“COUNT(TD.t_detail_id) as 'User Comment'”,如果没有匹配项,这样将给出计数 0。

最佳答案

您需要将条件移至 on 子句。

select T.t_id as TicektID, TK.tk_category as Category,
coalesce(T.contact_person, 'N/A') as Contact_Person,
T.comment as Employee_Comment,
COUNT(TD.t_detail_id) as num_comments,
T.t_status
from sun_it_tickets T left join
sun_it_ticket_categories tk
on TK.tk_id = T.tk_id left join
sun_it_tickets_detail TD
on TD.t_id = T.t_id and TD.tech_viewed = 0
group by Category, Contact_Person, Employee_Comment, t_status
order by max(T.submit_time);

注释:

  • 不要对列别名使用单引号。仅对字符串和日期常量使用单引号。
  • 所有非聚合列均应位于分组依据中。
  • 我怀疑您选择的列太多,但您的问题并不清楚您想要什么结果。
  • order by 应位于 group by 列或聚合表达式上。
  • coalesce() 是 ISO/ANSI 标准函数,因此我更喜欢使用它而不是特定于数据库的替代函数。

关于MySQL 想要左表中的所有结果,并仅使用条件过滤右表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51827400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com