代码之家  ›  专栏  ›  技术社区  ›  Michael637352

SQL Server:用查找表中的值替换表中的数值

  •  0
  • Michael637352  · 技术社区  · 2 年前

    我将数据存储在一个表中,该表要求删除特定值,以便更广泛地共享。
    需要删除的数据将具有如下密钥:

    数据表

    陈述 答复
    名字 Mike
    Smith
    位置 Fitter
    法国
    工作年限 25

    查找

    钥匙 回来
    名字 修改
    已删除
    不可用

    输出:

    陈述 答复
    名字 修改
    已删除
    位置 Fitter
    不可用
    工作年限 25

    当Statement=Key时,我尝试使用联接,并尝试使用SET来匹配列。我设法用Return中的值替换了Answer列中的值,但也用NULL替换了查找列中不匹配的值


    我尝试过的代码:

    SELECT *
    FROM [Data Table] DATA
    LEFT JOIN [Lookup up] DSL
    ON DATA.[Statement] = DSL.[Key]
    

    UPDATE [Data Table Sanitised]
    SET [Answer] = (
    SELECT [Return]
    FROM [Look up]
    WHERE [Key] = [Statement]
    )        
    

    两者均返回:

    陈述 答复
    名字 修改
    已删除
    位置 NULL
    不可用
    工作年限 NULL
    2 回复  |  直到 2 年前
        1
  •  0
  •   3N1GM4    2 年前

    使用您的示例数据:

    create table #data
    (
        [Statement] varchar(20),
        Answer varchar(10)
    )
    
    insert into #data values
    ('First Name','Mike'),
    ('Last Name','Smith'),
    ('Position','Fitter'),
    ('Country','France'),
    ('Years Worked','25')
    
    create table #lookup
    (
        [Key] varchar(20),
        [Return] varchar(20)
    )
    
    insert into #lookup values
    ('First Name','Redacted'),
    ('Last Name','Removed'),
    ('Country','Not Available')
    

    这给出了预期的输出:

    select
        d.[Statement],
        coalesce(l.[Return],d.Answer) as Answer
    from #data d
    left join #lookup l on d.[Statement] = l.[Key]
    

    结果:

    陈述 答复
    名字 修改
    已删除
    位置 Fitter
    不可用
    工作年限 25
        2
  •  0
  •   Thom A    2 年前

    当Statement=Key时,我尝试使用联接,并尝试使用SET来匹配列。我设法用Return中的值替换了Answer列中的值,但也用NULL替换了查找列中不匹配的值

    我认为您的查询有问题的原因是您使用 LEFT JOIN SET 无任何声明 WHERE 条款:

    SELECT *
    INTO [Data Table Sanitised]
    FROM [Data Table] DATA
    LEFT JOIN [Look up] DSL
    ON DATA.[Statement] = DSL.[Key]
    WHERE DSL.[Key] IS NOT NULL;
    

    UPDATE [Data Table Sanitised]
    SET [Answer] = (
        SELECT [Return]
        FROM [Look up]
        WHERE [Key] = [Statement]
    )
    WHERE [Statement] IN (SELECT [Key] FROM [Look up]);