【问题标题】:Simple update query in accessaccess中的简单更新查询
【发布时间】:2015-08-20 20:28:37
【问题描述】:
UPDATE _DATA SET 
[_DATA].Claim_Status = "UNKNOWN", 
[_DATA].State_Filed = "XX", 
[_DATA].Disease_Category = "UNKNOWN"
WHERE 
((([_DATA].Claim_Status) Is Null) AND 
(([_DATA].State_Filed) Is Null) AND 
(([_DATA].Disease_Category) Is Null));

这段代码是我在查询设计中输入标准得到的。 似乎只有当 claim_status、state_filed 和 disease_category 都是空(空)单元格时才会运行。我想运行一个查询,将“未知”填充到 Claim_Status 下的空单元格、State_Filed 下的“XX”int 空单元格等。条件不应包括“AND”,这意味着它们基本上是单独运行的。

谁能帮我解决这个问题?

提前致谢。

【问题讨论】:

  • 考虑 3 个简单查询 --- 每个要更新的字段一个。这是其中的第一个:UPDATE _DATA SET Claim_Status = "UNKNOWN" WHERE Claim_Status Is Null
  • 这是否意味着我必须有 3 个查询才能进行此更改?

标签: sql ms-access


【解决方案1】:

如果这三个字段都是NULL,则此查询只会更新Claim_StatusState_FiledDisease_Category。例如,假设State_FiledNULL,但Disease_CategoryClaim_Status 填充了数据。在这种情况下,您的更新不会更新State_Filed,因为并非所有三列都是NULL。您应该使用三个单独的查询来确保所有 NULL 列都得到更新,而不管其他两个是否已填充:

UPDATE _DATA
SET Claim_Status = 'UNKNOWN' 
WHERE Claim_Status IS NULL

UPDATE _DATA
SET State_Filed = 'XX' 
WHERE State_Filed IS NULL

UPDATE _DATA
SET Disease_Category = 'UNKNOWN' 
WHERE Disease_Category IS NULL

另外,我个人不会更新 NULL 字段以包含数据。如果您没有这些列的数据,则您没有数据。例如,如果您希望 NULL 状态显示为 XX 而不是 NULL,则执行此操作的位置是在您的表示层或报告您注销此数据,而不是数据库本身。

【讨论】:

  • 感谢您的意见。是否可以在一个更新查询中使用那一大块行,以便一次完成所有操作?
  • 我不相信,每个UPDATE都是一个单独的事务,必须自己运行。有关冗长的解决方法,请参阅此:stackoverflow.com/questions/1838593/…。现在,如果它是NULL,您可能会使用 case 语句将值更新为默认值,或者如果不是,则将其设置回自身,但这会触及数据库中每一行的每一列。我真的不建议这样做。
【解决方案2】:

你可以使用 Nz:

UPDATE 
    _DATA 
SET 
    Claim_Status = Nz(Claim_Status, "UNKNOWN"), 
    State_Filed = Nz(State_Filed, "XX"), 
    Disease_Category = Nz(Disease_Category, "UNKNOWN")
WHERE 
    Claim_Status Is Null 
    OR 
    State_Filed Is Null 
    OR 
    Disease_Category Is Null;

【讨论】:

  • 只有status,state,disease都为NULL的时候才改变值吗?
  • 那么你将使用 AND,而不是 OR。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 2010-10-13
相关资源
最近更新 更多