SQL如何基于前一列登录信息从关联表拉取对应用户姓名
修正方案
原有SQL存在几个问题:
- 未选择查询ns_medication表的mlx_ubl字段,缺少结果需要的第一列
- 使用
+拼接字符串的语法不适配所有数据库,且未添加姓名中间的分隔空格 - 未给查询字段设置别名,无法得到期望的列名
可根据你使用的数据库类型选择对应写法:
适配PostgreSQL、Oracle、SQLite(支持标准SQL拼接符)
SELECT ns_medication.mlx_ubl AS "UBL", oslogname.lognm_firstnm || ' ' || oslogname.lognm_lastnm AS "Employee Name" FROM oslogname INNER JOIN ns_medication ON oslogname.mlx_ubl = ns_medication.mlx_ubl;
适配MySQL
SELECT ns_medication.mlx_ubl AS UBL, CONCAT(oslogname.lognm_firstnm, ' ', oslogname.lognm_lastnm) AS `Employee Name` FROM oslogname INNER JOIN ns_medication USING(mlx_ubl);
适配SQL Server
SELECT ns_medication.mlx_ubl AS UBL, ISNULL(oslogname.lognm_firstnm, '') + ' ' + ISNULL(oslogname.lognm_lastnm, '') AS [Employee Name] FROM oslogname JOIN ns_medication ON oslogname.mlx_ubl = ns_medication.mlx_ubl;
注意事项
- 上述示例默认使用INNER JOIN,仅返回两张表关联匹配成功的记录,若需保留ns_medication中未匹配到姓名的UBL记录,可将INNER JOIN替换为LEFT JOIN
- 带空格的列别名需要根据数据库类型选择对应的包裹符号:MySQL用反引号,PostgreSQL/Oracle用双引号,SQL Server用方括号
- 如果存在名或姓为空的情况,可额外添加空值处理函数,避免拼接结果出现多余空格或者null值
内容的提问来源于stack exchange,提问作者Karen Garland
相关产品推荐
相关产品推荐

