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

MySQL查询日志表两ID字段关联同user表获取对应用户名

错误原因

原SQL的核心问题是没有正确区分user表的两次关联逻辑:user_log表中user_id和updated_by两个字段都要关联user表的user_id主键,分别取被操作用户和操作人的姓名,原写法混淆了关联匹配字段,还在子查询中格式化时间丢失了时分秒,最终导致姓名字段取值错误。

正确SQL实现
SELECT
  l.user_id AS log_user_id,
  u_target.name AS log_user_name,
  l.action,
  l.changed_date,
  l.updated_by AS updated_user_id,
  u_operator.name AS updated_user_name
FROM user_log l
-- 关联被操作的目标用户
INNER JOIN user u_target
  ON l.user_id = u_target.user_id
-- 关联执行操作的用户
INNER JOIN user u_operator
  ON l.updated_by = u_operator.user_id
ORDER BY l.changed_date ASC;

如果存在日志关联的用户已被删除、需要保留全部日志记录的场景,可以把INNER JOIN换成LEFT JOIN,避免关联不到用户时整条日志被过滤。
原写法中用DATE_FORMAT(l.changed_date,'%Y-%m-%d')会把时间截断到日期维度,丢失时分秒部分,和预期返回的完整时间格式不符,因此直接取原表的changed_date字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:21:28