当另一列与SQL中的列表中的值匹配时更新列值

时间:2016-12-13 03:06:00

标签: sql sql-server

我有一个名为ITEMSLIST的表

ItemName    SourceID    Origin      Description
Item1       108         USA         Item of Importance
Item2       112         USA         Item of Importance
Item3       120         UK          Item of Importance
Item4       108         USA         Item of Importance
Item5       221         UK          Item of Importance
Item6       221         USA         Item of Importance
Item7       108         USA         Item of Importance
Item8       139         USA         Item of Importance
Item9       385         USA         Item of Importance
Item10      111         UK          Item of Importance

我试图执行以下操作:

如果SourceID与很长的列表中的项目匹配,则Origin需要从USA更改为UK。该列表不是来自表格,它只是一个值列表

该列表的缩短版本为108,221,385

我尝试过使用过的情况,但不能正常使用

UPDATE ITEMSLIST
SET Origin = 'UK'
WHERE
    CASE
        WHEN EXISTS (SELECT *
            FROM ITEMSLIST
                WHERE a.SourceList = SourceID)
    END
FROM (VALUES
        ('108'),
        ('221'),            
        ('385')) a(SourceList)

2 个答案:

答案 0 :(得分:1)

您正在寻找join

UPDATE il
    SET Origin = 'UK'
FROM ITEMSLIST il JOIN
     (VALUES
        ('108'),
        ('221'),            
        ('385')
     ) a(SourceList)
     ON a.SourceList = il.SourceId;

答案 1 :(得分:1)

尝试使用以下内容:

更新ITEMSLIST     SET Origin ='UK' 在哪里SourceID IN('108','221','385')

更新李     SET Origin ='UK'         来自ITEMSLIST李 在哪里存在(选择1来自ITEMSLIST il WHERE il.SourceID IN('108','221','385')