SQL使用复合主键更新表中除某些行以外的所有行
我正在努力处理SQL语句 我想用复合主键更新表中除某些行以外的所有行 这就是我现在所做的:SQL使用复合主键更新表中除某些行以外的所有行,sql,composite-key,except,Sql,Composite Key,Except,我正在努力处理SQL语句 我想用复合主键更新表中除某些行以外的所有行 这就是我现在所做的: UPDATE Products SET Active = 0 _ 这很管用,但我不喜欢。我希望能一次成功 在SQL中有这样做的方法吗?您的意思是: UPDATE Products SET Active = CASE WHEN (Id_A = 1 AND Id_B = 1 AND Id_C = 1) OR (Id_A = 1 AND Id_B = 2 AND Id_C = 1) O
UPDATE Products SET Active = 0
_
这很管用,但我不喜欢。我希望能一次成功
在SQL中有这样做的方法吗?您的意思是:
UPDATE Products SET Active = CASE WHEN
(Id_A = 1 AND Id_B = 1 AND Id_C = 1) OR
(Id_A = 1 AND Id_B = 2 AND Id_C = 1) OR
(Id_A = 5 AND Id_B = 8 AND Id_C = 3) OR
.
.
.
THEN 1 ELSE 0 END
能否在update语句中使用大小写表达式 差不多
UPDATE Products
set Active = CASE WHEN (Id_A = 1 AND Id_B = 1 AND Id_C = 1) THEN 1
WHEN (Id_A = 1 AND Id_B = 2 AND Id_C = 1) THEN 1
.
.
.
ELSE 0 END
在某些SQL产品中,您可以进一步简化
CASE
中的语法,将多个和和或删除为中的简单:
UPDATE Products
SET Active = CASE WHEN
(Id_A, Id_B, Id_C) IN
( (1, 1, 5), (1, 2, 1), (5, 8, 3) ... )
THEN 1 ELSE 0
END ;
另一个要考虑的是,如果表有很多行(如数百万或十亿),并且只有一小部分被设置为<代码> Active=1 ,那么更新的完成可能是更有效的,这是2个语句,类似于从一开始就有的,假设您在<代码>(Active)上有索引。(或
(Active=1)
上的部分索引):
为什么不把不应该更新的行放进去呢?例外情况是什么?什么数据库系统,哪个版本?SQL只是结构化查询语言——一种被许多数据库系统使用的语言,但不是一种数据库产品……了解您使用的是什么数据库系统真的很有帮助……我想他想减少这个数量我想他希望根据条件+1在一次更新中加入0/1,但是@JonList在你的查询中,你也会一次完成所有的更新,还是你做了很多更新?我做了两次更新(两次都是从最初的帖子中提出的查询)。我只知道哪些产品需要激活,所以我停用数据库中的所有内容,然后激活我知道需要激活的产品。不幸的是,我的mssql不喜欢这一个。不过我喜欢它的清洁度
UPDATE Products
SET Active = CASE WHEN
(Id_A, Id_B, Id_C) IN
( (1, 1, 5), (1, 2, 1), (5, 8, 3) ... )
THEN 1 ELSE 0
END ;
UPDATE Products SET Active = 0 WHERE Active = 1 ;
UPDATE Products SET Active = 1 WHERE ... ;