如何使用简单的Join语句更新具有不同值的列?

时间:2017-10-03 09:55:41

标签: sql sql-server tsql sql-server-2012

我有两个表,我在它们之间使用简单的连接条件。

我需要找到常用值并将字符串(成功)更新到列中。

input_table1:

ID   ||  Name   ||  output
1    ||  ABS    ||   Null
2    ||  ADF    ||   NULL
3    ||  AQS    ||   Null
4    ||  ATF    ||   NULL
5    ||  APS    ||   Null
6    ||  AMF    ||   NULL

Input_table2:

ID   ||  Name   
1    ||  ABS    
2    ||  ADF   
6    ||  AMF    

Output_table:这是我需要的输出。

ID   ||  Name   ||  output
1    ||  ABS    ||   Success
2    ||  ADF    ||   Success
3    ||  AQS    ||   Null
4    ||  ATF    ||   NULL
5    ||  APS    ||   Null
6    ||  AMF    ||   Success.

这是我正在使用的查询,这是我收到的错误 在预期条件的上下文中指定的非布尔类型的表达式,接近'Then'。

update .[dbo].[InputTable1] 
set Output= 
case when (
select INT.ID
from [dbo].[input_table1] INT
join [dbo].[input_table2] SHB
on INT.ID=SHB.ID
) Then 'Success' Else Null End

4 个答案:

答案 0 :(得分:5)

您的查询应该只是

update INT
set Output= 'Success'
FROM
[dbo].[input_table1] INT
join [dbo].[input_table2] SHB
on INT.ID=SHB.ID

See working demo

答案 1 :(得分:3)

...CASE WHEN <condition> = <value> THEN....

您遗失<value>我怀疑您在查询后需要IS NOT NULL

那说,效率不高。 DhruvJoshi更好

答案 2 :(得分:1)

我会在EXISTS后面使用FROMUPDATE作为

UPDATE it
SET Output = (CASE WHEN exists(
       SELECT 1
       FROM [dbo].[input_table2] SHB
       WHERE it.ID=SHB.ID) 
    THEN 'Success' ELSE Null END)
FROM [dbo].[InputTable1] it

答案 3 :(得分:1)

你可以试试这个:

UPDATE
    InputTable1
SET
    Output='Success'
FROM
    InputTable1
    JOIN InputTable2 ON
        InputTable1.ID=InputTable2.ID

只会更新已加入的行