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

如何基于现有视图的head_fullname逻辑关联q_employee新增head_login字段?

解决方案

先保留原视图中head_fullname的生成逻辑,在此基础上关联q_employee表,复用相同的CASE逻辑匹配fullname字段,从而获取对应的login作为head_login的值。

原head_fullname生成逻辑(格式化后)

case
   when p.dep_id <> 'MM' then
     case
       when p.man_id = '######' then
         'Special name'
       when m2.man_login is not null then
          c2.last_name || ' ' || c2.fst_name || ' ' || c2.mid_name
       else
          c3.last_name || ' ' || c3.fst_name || ' ' || c3.mid_name
       end
   else
      o.head_fullname
end as head_fullname

新增head_login字段的两种实现方式

方式1:用子查询封装原逻辑(更易维护)

将原视图查询封装为子查询,生成head_fullname后再关联q_employee表匹配登录名:

SELECT
    t.*,
    q.login AS head_login
FROM (
    -- 原视图的完整查询语句,包含所有原有字段和head_fullname生成逻辑
    SELECT
        -- 原视图的其他字段
        case
           when p.dep_id <> 'MM' then
             case
               when p.man_id = '######' then
                 'Special name'
               when m2.man_login is not null then
                  c2.last_name || ' ' || c2.fst_name || ' ' || c2.mid_name
               else
                  c3.last_name || ' ' || c3.fst_name || ' ' || c3.mid_name
               end
           else
              o.head_fullname
        end as head_fullname
        -- 其他原有字段
    FROM 原视图涉及的表关联语句
) t
LEFT JOIN q_employee q ON t.head_fullname = q.fullname;

方式2:直接在关联条件复用CASE逻辑

如果不想用子查询,可直接在JOIN条件中重复编写CASE逻辑进行匹配:

SELECT
    -- 原有字段
    case
       when p.dep_id <> 'MM' then
         case
           when p.man_id = '######' then
             'Special name'
           when m2.man_login is not null then
              c2.last_name || ' ' || c2.fst_name || ' ' || c2.mid_name
           else
              c3.last_name || ' ' || c3.fst_name || ' ' || c3.mid_name
           end
       else
          o.head_fullname
    end as head_fullname,
    -- 新增的head_login字段
    q.login AS head_login
FROM 原视图涉及的表关联语句
LEFT JOIN q_employee q ON (
    case
       when p.dep_id <> 'MM' then
         case
           when p.man_id = '######' then
             'Special name'
           when m2.man_login is not null then
              c2.last_name || ' ' || c2.fst_name || ' ' || c2.mid_name
           else
              c3.last_name || ' ' || c3.fst_name || ' ' || c3.mid_name
           end
       else
          o.head_fullname
    end
) = q.fullname;

补充说明

  • 使用LEFT JOIN可确保即使head_fullname在q_employee表中无匹配项,原视图的数据也不会丢失,此时head_login会返回NULL
  • 子查询写法更优,避免重复编写相同的CASE逻辑,后续维护更方便

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:24:21