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

SQL技术咨询:如何通过员工ID关联两表匹配建筑名称?

看来你遇到的问题是关联表后,CASE语句没能正确匹配到建筑名称,反而返回了空值对吧?咱们一步步来排查和解决这个问题:

核心问题:表关联逻辑缺失

你给出的查询只展示了SELECT部分,但没写出表的JOIN关联语句——这几乎肯定是导致建筑名显示为空的原因!如果没有正确把emp、empb和bld三张表关联起来,emp.emp_id和empb.emp_id根本找不到匹配的行,CASE自然会走ELSE分支返回空字符串。

修正后的查询示例

假设你的表关联关系是这样的:

  • emp(员工表)通过emp_id关联empb(员工-建筑关联表,记录员工对应的建筑ID)
  • empb通过bld_id关联bld(建筑表,存储建筑名称)

那正确的查询应该写成这样:

SELECT DISTINCT 
    emp.[emp_ln], 
    emp.[emp_fn], 
    empb.[emp_id], 
    BUILDING_NAME = CASE 
                        WHEN emp.[emp_id] = empb.[emp_id] THEN bld.[bld_name] 
                        ELSE '' 
                    END
FROM 
    emp
INNER JOIN empb 
    ON emp.[emp_id] = empb.[emp_id]  -- 必须明确员工表和关联表的关联条件
INNER JOIN bld 
    ON empb.[bld_id] = bld.[bld_id]  -- 再通过关联表关联到建筑表
额外排查小技巧
  • 如果需要保留所有员工(哪怕没有对应建筑的员工),把INNER JOIN改成LEFT JOIN,这样无匹配的员工会显示空字符串,符合你CASE的ELSE逻辑。
  • 检查emp.emp_id和empb.emp_id的数据类型是否一致(比如一个是INT,一个是VARCHAR),类型不匹配会悄悄导致匹配失败。
  • 可以先去掉DISTINCT测试结果,看看是不是去重操作把正确的匹配结果过滤掉了,确认没问题后再加回去。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:34:10