You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL多表关联查询:根据discussion_id获取聊天用户名称

解决方案:关联多表获取不同用户类型的名称

原SQL仅通过INNER JOIN关联end_user表,会过滤掉不在该表中的聊天记录,无法获取psychology表的用户数据。我们可以通过LEFT JOIN分别关联两个表,再用COALESCE函数优先读取end_user的姓名,当用户不在end_user表时自动读取psychology表的对应名称。

假设psychology表中存储用户ID的字段为psychology_id、存储名称的字段为name(如果实际字段名不同,请自行替换),修改后的SQL如下:

SELECT
    dc.user_id,
    dc.created_date,
    dc.content,
    -- 优先取end_user的姓名,无则取psychology的名称
    COALESCE(eu.first_name, p.name) AS user_name
FROM
    `discussion_chat` dc
LEFT JOIN `end_user` eu
    ON dc.user_id = eu.end_user_id
LEFT JOIN `psychology` p
    ON dc.user_id = p.psychology_id
WHERE
    dc.discussion_id = 53

关键说明:

  • LEFT JOIN:确保所有符合discussion_id=53的聊天记录都被保留,不会因为用户不在某张表中而被过滤
  • COALESCE函数:按顺序返回第一个非空值,完美适配"优先取end_user,再取psychology"的需求
  • 过滤条件移至WHERE子句:这是更规范的写法,明确对主表discussion_chat的筛选逻辑,而非关联条件

内容的提问来源于stack exchange,提问作者yab tsega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:42:08