在涉及连接的更新查询中使用条件

时间:2017-08-28 14:59:41

标签: sql ms-access

我正在使用MS Access

下面的SQL更新了父tblContact记录中的CurrNumTees字段,其中包含具有结束日期的tblTorTee记录的数量(这不是我的目标,但我将其作为起点。

UPDATE tblContact 
  INNER JOIN tblTorTee ON tblContact.ContactId = tblTorTee.TorId 
SET tblContact!CurNumTees = DCount("[tblTorTee.EndDate]",
  "tbltortee","Torid = " & [ContactId]);

我需要使用tblTorTee中没有EndDate的记录数更新CurrNumTees字段,换句话说,该字段为空。我尝试在各种组合和位置使用WHERE和HAVING和IS NULL,但没有成功。你能指点我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

MS Access COUNT函数不计算空值,因此我认为您必须分两个阶段执行此操作。

首先创建一个这样的查询:

SELECT TorId, IIF(ISNULL(EndDate),1,0) AS isN
FROM tblTorTee
WHERE EndDate IS NULL;

并将其保存为QryEndDateNull

现在您可以像这样运行更新查询:

UPDATE tblContact
SET tblContact.CurNumTees = DSUM("IsN","QryEndDateNull","TorId = " & [ContactID]);

答案 1 :(得分:1)

保存计算数据(数据依赖于其他数据)通常是一种糟糕的设计,尤其是聚合数据。应该只在需要时计算。

您是否在DCount()中尝试了IS NULL标准?

UPDATE tblContact Set CurNumTees = DCount("*", "tblTorTee", "EndDate Is Null AND TorId = " & [ContactId]);