gpt4 book ai didi

mysql - 复杂的sql查询 - 无法弄清楚

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

  • Table tickets {id, subject, appt_id}//appt_id 50% 的时间为空
  • ticket_notes {id, message, Tickets_id}//一些门票不会有注释,有些门票会有很多注释
  • Table appt {id, fname, lname, hash}//某些哈希字段将为空

我需要形成联接,以便我拥有所有票证及其所有注释。此外,如果票证具有 appt_id 并且 appt 表中的相应行具有哈希值,则我们需要在消息顶部显示 APPT 表中的 fname 和 lname(为每个票证聚合)。我的票证和注释之间的连接工作正常(见下文),但是刚刚出现了在 appt 表中添加的附加问题,我不确定如何解决所有票证中没有 appt_id 且没有哈希的条件问题在所有 appt 行中。

SELECT tickets.id as id, tickets.subject as subject, 
group_concat(n.message SEPARATOR '<br><br>') as messages
FROM tickets LEFT JOIN tickets_notes n ON n.`ticket_id` = tickets.`id`
GROUP BY tickets.id;

最佳答案

假设appt中对应给定ticket的记录不超过一条,您只需再添加一条LEFT JOIN:

SELECT 
t.id,
t.subject,
a.lname,
a.fname,
group_concat(n.message SEPARATOR '<br><br>') as messages
FROM tickets t
LEFT JOIN tickets_notes n ON n.`ticket_id` = t.`id`
LEFT JOIN appt a ON a.id = t.appt_id AND a.hash IS NOT NULL
GROUP BY
t.id,
t.subject,
a.lname,
a.fname

appt 上的连接条件与 appt(id) 上的 ticket(appt_id) 匹配;还有一个附加条件:appt(hash) 不应为 null

旁注:

  • 最好在 GROUP BY 子句中列出所有非聚合列(从 MySQL 5.7 开始,默认情况下这是强制的 - 大多数其他RDBMS 的工作方式相同)

  • 无需为 t.id 之类的列添加别名:默认使用原始列名称(当您想要分配不同的 姓名)

  • 我修改了查询以一致地使用表别名

关于mysql - 复杂的sql查询 - 无法弄清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59830917/

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