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

请求修正基于视图整合new_table与old_table WDR数据的SQL代码

问题场景

现有两张表数据:

  • new_table数据:
Codename
S001WDR
S002WDR
S005AXC
  • old_table数据:
Codename
S001WDR
S003WDR
S004MNO

约束:不可修改两张原始表,需创建视图Dummy实现数据整合,要求:

  • 包含new_table中所有name为WDR的数据
  • 包含old_table中未与new_table的WDR数据重复的所有数据(重复指Code相同,以new_table数据为准)
  • 最终视图输出code、name、db_name字段,示例输出:
codenamedb_name
S001WDRNew
S002WDRNew
S003WDRold
S004MNOold
原SQL存在的问题
  1. 多个字段定义之间缺失逗号(如name = ne.name与db_name = CAST('New' as char(3))之间无逗号)
  2. old_table的查询未过滤掉与new_table中WDR重复的Code,导致重复Code的优先级处理错误
  3. Row_Number的排序规则错误,order by db_name DESC会让old优先级高于New,不符合"重复Code以new_table数据为准"的要求
  4. 存在不必要的Distinct,Union All结合后续Row_Number已能实现去重逻辑
修正后的SQL代码
CREATE VIEW Dummy
AS
WITH input AS (
    -- 取new_table中所有name为WDR的数据,标记为New
    SELECT 
        Code = ne.Code,
        name = ne.name,
        db_name = CAST('New' AS CHAR(3))
    FROM new_table AS ne 
    WHERE name = 'WDR'

    UNION ALL 

    -- 取old_table中Code不在new_table的WDR集合中的所有数据,标记为old
    SELECT 
        Code = ol.Code,
        name = ol.name,
        db_name = CAST('old' AS CHAR(3))
    FROM old_table AS ol
    WHERE ol.Code NOT IN (
        SELECT Code FROM new_table WHERE name = 'WDR'
    )
),
data AS (
    SELECT 
        code = input.code,
        name = input.name,
        db_name = input.db_name,
        -- 按Code分组,让New的优先级最高(ranking=1)
        ranking = ROW_NUMBER() OVER(PARTITION BY code ORDER BY db_name ASC)
    FROM input
)
SELECT 
    code = data.code,
    name = data.name,
    db_name = data.db_name  
FROM data
WHERE data.ranking = 1;
修正说明
  1. 补全字段间缺失的逗号,修复语法错误
  2. 为old_table添加过滤条件,通过子查询排除new_table中WDR的Code,避免重复数据进入临时集合
  3. 将ROW_NUMBER排序规则改为ORDER BY db_name ASC,利用字母顺序让New记录被标记为ranking=1,确保重复Code以new_table数据为准
  4. 移除不必要的Distinct,将模糊查询like '%WDR%'改为精确匹配name = 'WDR',贴合需求明确性
  5. 在data临时表中保留db_name字段,确保最终查询能正确输出该字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:10:32