访问 2013,想确保我的 SQL 正在做我想做的事

Access 2013, want to make sure my SQL is doing what I think it is

我的理解是下面的SQL是:

(1) 从tbl1取数据更新tbl2

(2) 添加新记录和更新旧记录。

(3) 覆盖 tbl2 中的现有数据

(4) 不要用空白单元格覆盖 tbl2 中的数据

我在这个问题上是否偏离了目标?如果是,怎么办?

UPDATE tbl1
INNER JOIN tbl2 
ON tbl1.thing0 = tbl2.thing0 
SET tbl2.[thing1] = tbl1.[thing1], tbl2.[thing2] = tbl1.[thing2], tbl2.[thing3] = tbl1.[thing3];

编辑1

所以为了满足条件 2 和 4 并让用户轻松使用:

(2) 使用 APPEND 查询添加新的数据行,UPDATE 只会更改现有的行。

(4) 使用更新查询,如何防止它用空白单元格覆盖现有行中的数据?

我有用户在现场实时更新 table,我担心远程用户在建立连接后更新 table 会用一堆更新覆盖现场用户数据空白单元格。

这样的东西能满足条件4吗?

UPDATE tbl1
INNER JOIN tbl2 
ON tbl1.thing0 = tbl2.thing0 
SET tbl2.[thing1] = tbl1.[thing1], tbl2.[thing2] = tbl1.[thing2], tbl2.[thing3] = tbl1.[thing3]
WHERE Not Null:

(5) 然后将宏附加到命令按钮,以便用户可以 运行 同时查询。

  1. no - UPDATE 不添加记录;您的查询更新了 tbl2 中的所有记录,其中可以找到 tbl1 中的相应记录
  2. 否 - 如果 tbl1 中对应的 row/record 有 empty/blank 字段,那么无论如何这些都会被写入 tbl2

OP 编辑​​后,Re #4:

您可以在 SET 行上使用 Iif(),如下所示(也许您应该添加 Trim() 或检查 NULL 值或类似值):

SET tbl2.[thing1] = Iif(tbl1.[thing1] = '', tbl2.[thing1], tbl1.[thing1])

Iif() 是 MS Access 函数;在正确的 SQL 你必须使用 Case 语句。