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
相关产品推荐
相关产品推荐

