Access 2013,要确保我的SQL正在执行我认为应该执行的操作吗

Access 2013,要确保我的SQL正在执行我认为应该执行的操作吗,sql,database,ms-access,ms-access-2013,Sql,Database,Ms Access,Ms Access 2013,我的理解是,以下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]

我的理解是,以下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) 使用追加查询添加新行数据,更新只会更改现有行

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

我让用户在现场实时更新一个表,担心远程用户一旦建立连接就更新表,会用一堆空白单元格覆盖现场用户数据

这样的东西能满足条件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) 然后将宏附加到命令按钮,以便用户可以同时运行这两个查询

  • 否-更新不添加记录;您的查询将更新tbl2中的所有记录,在tbl1中可以找到相应的记录
  • 否-如果tbl1中对应的行/记录具有空/空白字段,则这些字段仍将写入tbl2
  • 在OP编辑后,重新#4:

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


    Iif()是MS访问函数;在正确的SQL中,您必须使用Case语句。

    您在集合行上有拼写错误吗?db2的意思是tbl2等?很抱歉我错过了,修正了。实际上是1。是“否”(1)从tbl1获取数据并更新tbl2。它正在更新tbl1。@SQLDBA-这不是SQL,而是MS Access:)这意味着它可以更新任何连接的表;查看SET行可以发现tbl2中的字段被更新了。奇怪的是,这是有道理的。谢谢你的澄清。
    SET tbl2.[thing1] = Iif(tbl1.[thing1] = '', tbl2.[thing1], tbl1.[thing1])