【问题标题】:Update TableA from TableB Match从 TableB 匹配更新 TableA
【发布时间】:2017-10-23 19:31:26
【问题描述】:

我有两个表,两个表的第一列都匹配,我需要 UPDATE TableA 与 TableB 中的所有数据,只有在 TableA.Column1TableB.Column1 匹配的地方。我很难弄清楚如何让它工作...... TableA 有大约 80 多列,TableB 大约有 100 多列。我正在 Microsoft Access 中尝试此操作。

表A

+---------+---------+---------+---------+---------+---------+
| Column1 | Column2 | Column3 | Column4 | ....... | ColumnX |
+---------+---------+---------+---------+---------+---------+
|    1    |  DataA  |         |  DataA  | ....... |         |
+---------+---------+---------+---------+---------+---------+
|    2    |  DataA  |         |  DataA  | ....... |         |
+---------+---------+---------+---------+---------+---------+
|    3    |  DataA  |         |  DataA  | ....... |         |
+---------+---------+---------+---------+---------+---------+
|    4    |  DataA  |         |  DataA  | ....... |         |
+---------+---------+---------+---------+---------+---------+
| ....... | ....... | ....... | ....... | ....... | ....... |
+---------+---------+---------+---------+---------+---------+
|    X    |  DataA  |         |  DataA  | ....... |         |
+---------+---------+---------+---------+---------+---------+

表B

+---------+---------+---------+---------+---------+---------+
| Column1 | Column2 | Column3 | Column4 | ....... | ColumnX |
+---------+---------+---------+---------+---------+---------+
|    1    |         |  DataB  |         | ....... |  DataB  |
+---------+---------+---------+---------+---------+---------+
|    2    |         |  DataB  |         | ....... |  DataB  |
+---------+---------+---------+---------+---------+---------+
|    3    |         |  DataB  |         | ....... |  DataB  |
+---------+---------+---------+---------+---------+---------+
|    4    |         |  DataB  |         | ....... |  DataB  |
+---------+---------+---------+---------+---------+---------+
| ....... | ....... | ....... | ....... | ....... | ....... |
+---------+---------+---------+---------+---------+---------+
|    X    |         |  DataB  |         | ....... |  DataB  |
+---------+---------+---------+---------+---------+---------+

TableA的最终结果

+---------+---------+---------+---------+---------+---------+
| Column1 | Column2 | Column3 | Column4 | ....... | ColumnX |
+---------+---------+---------+---------+---------+---------+
|    1    |  DataA  |  DataB  |  DataA  | ....... |  DataB  |
+---------+---------+---------+---------+---------+---------+
|    2    |  DataA  |  DataB  |  DataA  | ....... |  DataB  |
+---------+---------+---------+---------+---------+---------+
|    3    |  DataA  |  DataB  |  DataA  | ....... |  DataB  |
+---------+---------+---------+---------+---------+---------+
|    4    |  DataA  |  DataB  |  DataA  | ....... |  DataB  |
+---------+---------+---------+---------+---------+---------+
| ....... | ....... | ....... | ....... | ....... | ....... |
+---------+---------+---------+---------+---------+---------+
|    X    |  DataA  |  DataB  |  DataA  | ....... |  DataB  |
+---------+---------+---------+---------+---------+---------+

到目前为止我尝试过的...

UNION 我很快就放弃了……似乎这只是给了我一个查询,而实际上我需要 UPDATE TableA 和 TableB 中的所有数据

还有……

UPDATE TableA ([Column1],[Column2],[Column3],[Column4], ....... [ColumnX])
SELECT [Column1],[Column2],[Column3],[Column4], ....... [ColumnX]
  FROM TableB
 WHERE (TableA.Column1 = TableB.Column2)

编辑 1:

试过这个...

运行时错误“3144”:UPDATE 语句中的语法错误

SQL = "   UPDATE tbleVendorData AS A " & _
      "     JOIN tbleOLD AS B " & _
      "       ON A.[Column1] = B.[Column1] " & _
      "      SET A.[Column14] = CONCAT(A.[Column14], B.[Column5])"

编辑 2:

【问题讨论】:

  • 错误信息是什么?它应该说大约错误所在的位置。
  • 哦,你可能需要做 A.[Column14] + B.[Column5] 而不是 CONCAT。我是 MySQL 母语人士!
  • 将其从 SET A.[Column14] = CONCAT(A.[Column14], B.[Column5]) 更改为 SET A.[Column14] = (A.[Column14] + B.[Column5]),但我仍然遇到相同的语法错误
  • 我已经更新了我的答案以包含可怕的 MSSQL 语法。
  • 尝试取出CONCAT,我认为MSSQL只有+运算符。请参阅我的更新答案。哎呀,我把它留在里面了!对不起。现在更新了。我太老了,不能同时处理多项任务。

标签: sql ms-access vba


【解决方案1】:

以下查询可能有效:

UPDATE TableA 
INNER JOIN TableB 
 ON(TableA.Column1 = TableB.Column2)
SET 
    TableA.Column3 = TableB.column3,
    ...
    TableA.Columnx = TableB.columnx
Where TableA.Column1 = TableB.column1;

希望对你有帮助!

【讨论】:

  • 您的答案将用 TableB 中的值覆盖 TableA 中的值,这不是问题所要求的。
  • 我不确定我是否理解这条线在说什么ON(table1.Column1 = table2.Column2)。这是否意味着 table1.Column1 正在尝试与 table2.Column2 匹配?不过,这不是匹配值的原因
  • ON 子句根据两个表应该加入的值来说明。此外,您可以在SET 子句中添加要更新的列。
  • 那么matching values是什么意思?
  • 我要匹配的值是TableA.Column1TableB.Column1;一旦它们与 TableA 中的所有行匹配,将从 TableB 中填充
【解决方案2】:

玩一玩:

UPDATE TableA AS A JOIN TableB AS B ON A.Column1 = B.Column1 SET A.Column1 = CONCAT(A.Column1,B.Column1) ...

或者在 MSSQL 中

UPDATE A SET A.[Column14] = A.[Column14] + B.[Column5] FROM tbleVendorData AS A JOIN tbleOLD AS B ON A.[Column1] = B.[Column1]

如果任何给定字段的值在一个表中为空,而第二个表中的相应字段不存在,那么您可以尝试 CONCAT(A.Column1,B.Column1) 例如。不聪明,但比使用 IF 更容易。

【讨论】:

  • 哪一栏是空白的比较零星,应该提的太抱歉了
  • 那么,CONCAT 解决方案可能会很好地工作。如果两个字段都不为空,您甚至不会丢失数据!
  • 哦,我还应该提到,我需要从 TableB 中跳过一些列。 CONCAT 还会为我工作吗?
  • 是的,刚刚更新了我的答案以展示您如何做到这一点。
  • 完美,我会试一试,然后回复你!谢谢,非常感谢!
【解决方案3】:

不幸的是,这些建议都不起作用...但是在进行了一些深入挖掘之后,以下内容对我有用!

UPDATE TableA, TableB
   SET TableA.Column15= [TableB].[Column3]
 WHERE (([TableA].[Column1]=[TableB].[Column1]));

【讨论】:

  • 这个方法和我的方法一样。这里的不同之处在于您使用旧方法连接 2 个表(使用逗号运算符,您不应该使用它),而我使用新方法通过 inner join....on 子句连接表。两者都会给出相同的结果,这是肯定的..
  • 知道了,它似乎可以满足我的需要,我也很感谢你的建议!再次感谢
猜你喜欢
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多