查询结果的SQL Update查询

时间:2015-06-18 19:42:34

标签: sql ms-access ms-access-2010 inner-join

我有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

Query1

  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),即  如果包含null,则将字段(Cvalue)设置为0。我正在使用像

这样的更新查询
   Update Query1 Set CValue = 0 Where CValue Is Null;

查询表(query1)会更新,如果是,则将Cvalue设置为0  包含空值,它还更新(设置0)Cvalues所在的Table1  空值。

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

1 个答案:

答案 0 :(得分:2)

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

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替换。我只是喜欢别名。