[英]MS Access - SQL Inner Join two conditions and Len-Function
我有一个数据库,其中包含一个用作主数据库的表,并且每天都会通过具有相同布局的表对其进行更新和扩展。 在使用每日数据更新几乎整个主数据之前,我想测试每日更新期间特定列的值是否发生了变化。 通常,此列仅包含Null或“ X”。
作为原型,我只比较了表A和表B的特定列,如果有区别,请在该列中设置一个包含多个字符的值(此处为昨天的日期)。
这是作为原型工作的代码:
UPDATE ReiseMaster
INNER JOIN Update_Import
ON(ReiseMaster.Col3 <> Update_Import.Col3
SET ReiseMaster.Col3 = Date() - 1
现在,该列在母版中包含Null,“ X”或日期。 对于下一次更新,我现在必须确保将包含日期作为字符串的此先前更新的列值排除在外(否则ReiseMaster.Col3 <> Update_Import.Col3在将来对于它们始终为true,并且日期将总是被更新,这是不希望发生的。
我的方法是从主表中排除列中的值的长度大于1的所有数据集。
现在这是我的问题:
运行SQL代码使MS Access 不再响应 ,整个程序崩溃。 有人可以告诉我以下代码有什么问题吗?
UPDATE ReiseMaster
INNER JOIN ReiseMaster_Import
ON(ReiseMaster.`Attachment Indicator` <> ReiseMaster_Import.`Attachment Indicator` AND LEN(ReiseMaster.`Attachment Indicator`) <= 1)
SET ReiseMaster.`Attachment Indicator` = Date() - 1
附加信息:我使用Access VBA运行代码,在此期间还保存了保存在字符串中的SQL语句。 关于观察到更改后添加日期的原因,我想将日期作为首次更改值时的参考,以便在以后的阶段中对其进行进一步分析。
避免在更新查询中使用复杂的联接! 由于整个记录集需要可更新,因此Access往往会遇到问题。
而是使用WHERE
子句:
UPDATE ReiseMaster
INNER JOIN ReiseMaster_Import
ON(ReiseMaster.[Attachment Indicator] <> ReiseMaster_Import.[Attachment Indicator])
SET ReiseMaster.[Attachment Indicator] = Date() - 1
WHERE LEN(ReiseMaster.[Attachment Indicator]) <= 1
此外,Access使用方括号来转义列名中的空格。
请注意,如果您不使用联接表中的任何信息,而只是使用它来选择记录,则应改用Exists
子句:
UPDATE ReiseMaster
SET ReiseMaster.[Attachment Indicator] = Date() - 1
WHERE EXISTS(SELECT 1 FROM ReiseMaster_Import WHERE ReiseMaster.[Attachment Indicator] <> ReiseMaster_Import.[Attachment Indicator])
AND LEN(ReiseMaster.[Attachment Indicator]) <= 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.