MS Access - SQL Inner Join 两个条件和 Len-Function

MS Access - SQL Inner Join two conditions and Len-Function

我有一个带有 table 的数据库,我将其用作主数据库,每天都由具有相同布局的 table 更新和扩展。在我用每日数据更新几乎整个主数据之前,我想测试特定列的值在每日更新期间是否发生了变化。通常此列仅包含 Null 或 "X"。

作为原型,我只比较了Table A 和Table 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 将来对它们始终为真并且日期将始终更新,这是不希望发生的)。

我的方法是从主 table 中排除列中值的长度超过 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-statements在一个字符串中。关于我一看到变化就加上日期的原因,我想在第一次更改值时将日期作为参考,以便在后期进一步分析。

避免在更新查询中使用复杂的连接!由于整个记录集需要更新,因此 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 使用方括号转义列名中的空格。

请注意,如果您不使用联接 table 中的任何信息,而只是将其用于 select 记录,则应改用 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