MS Access更新查询中Is Null条件失效问题求助
MS Access更新查询无结果问题分析与解决
核心问题原因
你的查询逻辑存在矛盾:
INNER JOIN要求T_4006_Infusion.ProductID = T_Temp_MaxProductID.MaxProductID,但Null值和任何值的相等比较都返回未知(包括和另一个Null)。所以当ProductID为Null时,INNER JOIN无法匹配到任何T_Temp_MaxProductID的记录,最终没有符合条件的行被更新。
解决思路与修改方案
方案1:用子查询直接获取最大值(推荐)
放弃不必要的JOIN,直接从临时表中取出最大值,更新所有ProductID为空的记录:
UPDATE T_4006_Infusion SET ProductID = (SELECT MAX(MaxProductID) FROM T_Temp_MaxProductID) + 1 WHERE ProductID Is Null;
- 若
T_Temp_MaxProductID只有一条记录,也可以去掉MAX(),直接用(SELECT MaxProductID FROM T_Temp_MaxProductID)。
方案2:调整JOIN类型(仅作逻辑演示)
如果一定要用JOIN,需改为LEFT JOIN并设置无条件关联,确保空ProductID的记录能匹配到临时表的最大值:
UPDATE T_4006_Infusion LEFT JOIN T_Temp_MaxProductID ON True SET T_4006_Infusion.ProductID = [T_Temp_MaxProductID].[MaxProductID] + 1 WHERE T_4006_Infusion.ProductID Is Null;
额外排查点
- 确认
T_Temp_MaxProductID表中存在有效记录,若表为空,子查询会返回Null,更新后的ProductID仍为Null。 - 检查
ProductID的数字类型(如是否为Integer),确保MaxProductID+1不会超出类型的取值范围导致溢出。
内容的提问来源于stack exchange,提问作者ElphiusMostafa
相关产品推荐
相关产品推荐

