查询结果的 SQL 更新查询

Posted

技术标签:

【中文标题】查询结果的 SQL 更新查询【英文标题】:SQL Update query on query result 【发布时间】:2015-09-04 14:57:29 【问题描述】:

我有 2 张桌子,例如:

表 1

SID     Sdefinition   CValue
4057    s1             32
4058    s2             
4059    s3             6
4060    s4

Mapping_tbl

SID     SINID   ECFID   SID-SINID
4057    1099    4027e   1099_4057
4058    1099    4027e   1099_4058
4059    1121    4003e   1121_4059
4060    1121    4003e   1121_4060

查询1

  SELECT Mapping_tbl.SID, Table1.Sdefinition, Table1.CValue
  FROM Table1 INNER JOIN Mapping_tbl ON Table1.SID= Mapping_tbl.SID;

查询1(结果)

   SID  Sdefinition CValue
   4057    s1      32
   4058    s2      
   4059    s3      6
   4060    s4        

我有一种情况,我想更新查询表 (Query1),即 如果 field(Cvalue) 包含 null,则将其设置为 0。我正在使用更新查询,如

   Update Query1 Set CValue = 0 Where CValue Is Null;

查询表 (query1) 得到更新并将 Cvalue 设置为 0,如果它 包含空值,并且它还更新(设置 0)表 1,其中 C 值是 空值。

如何避免更新 Table1?任何建议。

【问题讨论】:

表一是基础表,它将更新。您只是想在查询输出中显示 0 而不是 null 吗? UPDATE from SELECT using SQL Server 的可能重复项 @Carl Sixsmith 是的,只是想显示 0 而不是 null 【参考方案1】:

您似乎不想更改存储在表中的值,并且希望在 CValue 为 Null 时查询显示为零。因此,您可以让查询仅在其结果集中用零替换 Null(不更改表中的值)...

SELECT m.SID, t.Sdefinition, IIf(t.CValue Is Null, 0, t.CValue) AS [CValue]
FROM Table1 AS t INNER JOIN Mapping_tbl AS m
ON t.SID= m.SID;

对于 Access 会话中的查询,您可以使用 VBA Nz() 函数...

SELECT m.SID, t.Sdefinition, Nz(t.CValue Is Null, 0) AS [CValue]
FROM Table1 AS t INNER JOIN Mapping_tbl AS m
ON t.SID= m.SID;

我为表名使用了别名。但是您不需要它们来进行 Null 替换。我只是更喜欢别名。

【讨论】:

没有意识到这是访问,这是一个比我更好的答案 是的,Access IsNull 与 SQL Server 不同。在 Access 中,它只接受一个参数并返回一个布尔值......但它不会用任何东西代替 Null 值。 像魅力一样工作,你是辉煌的 HansUp

以上是关于查询结果的 SQL 更新查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL server中用一段语句得到的查询结果 怎么当成一张新表进行更新操作

update更新一条查询结果

SQL对查询结果进行分组

SQL查询结果替换???????

SQL 查询结果加引号

sql server怎么把多个查询结果关联起来