根据3 OR条件更新表行

时间:2012-03-01 20:42:15

标签: sql-server

我有一个包含三个用户ID列和一个活动列

的表

表1

userID1 userID2 userID3 活性

我想将每一行设置为非活动状态(Active = 0),其中给定两个UserID存在于同一行中。什么是实现这一目标的最快和最合乎逻辑的方式?

谢谢!


编辑:对不起,我的问题应该更清楚了。 UserID1,2和3将始终包含用户ID。它们永远不会为空。我将在存储过程中将这些ID作为参数传递,因此我需要设置Active = 0,其中UserID1,UserID2或UserID3中的两个用户ID都存在于同一行中。

3 个答案:

答案 0 :(得分:1)

UPDATE Table1
SET Active  = 0
WHERE 1 = 
    CASE
        WHEN UserID1 IS NOT NULL AND UserID2 IS NOT NULL THEN 1
        WHEN UserID1 IS NOT NULL AND UserID3 IS NOT NULL THEN 1
        WHEN UserID2 IS NOT NULL AND UserID3 IS NOT NULL THEN 1
    END

如果您了解常见情况,该案例可以提高效率。它将保持其他案件和/或不必执行。

答案 1 :(得分:1)

UPDATE  Table1
SET     Active = 0
WHERE   @userID1 IN (userID1,userID2,userID3)
AND     @userID2 IN (userID1,userID2,userID3);

答案 2 :(得分:0)

我假设当用户不存在时,它为null。 此外,它会将所有活跃用户更新为1

update Table1 
set Active = case
            when (userID1 is not null and userID2 is not null) then 0 
            when (userID1 is not null and userID3 is not null) then 0 
            when (userID2 is not null and userID3 is not null) then 0
            else 1 
        end