在单个语句中一起使用UPDATE和JOIN

时间:2015-01-15 23:02:39

标签: sql ms-access

我一直在写这篇关于我正在写的声明的错误,并且想知道是否有人可以提供帮助。我有两张桌子。表A和表B.当两个ID匹配时,我想用表B中的值更新表A.

目前我的代码如下:

UPDATE [Table A]

SET [Table A].[Column 1]='value', [Table A].[Column 2]='value2', [Table A].[Column 3]='value3'

INNER JOIN [Table B]

ON [Table A].[Column 1] = [Table B].[Column 1] AND [Table B].[Column 2];

但是我一直在返回一个我无法识别的语法错误。

2 个答案:

答案 0 :(得分:1)

您在FROM之前错过了INNER JOIN条款。加入在SELECTUPDATEDELETE上的工作方式相同。试试这样:

UPDATE [Table A]
SET [Table A].[Column 1]='value', [Table A].[Column 2]='value2', [Table A].[Column 3]='value3'
FROM [Table A]
INNER JOIN [Table B]
ON [Table A].[Column 1] = [Table B].[Column 1] AND [Table B].[Column 2];

(未经测试,但它应该完成这项工作)

答案 1 :(得分:0)

这会将源表(S)中的值更新为目标表(T)

UPDATE T
SET T.COLUMNA = S.COLUMNA, T.COLUMNB = S.COLUMNB
FROM TARGET T
INNER JOIN SOURCE S ON T.IDCOLUMN = S.IDCOLUMN
WHERE
 S.FILTERCOLUMN = 'FILTERVALUE'

但是,如果您的方案需要使用合并语句,则可能需要考虑使用合并语句

MERGE TARGETTABLE T
USING SOURCETABLE S
    ON S.IDCOLUMN = T.IDCOLUMN
WHEN MATCHED THEN
    UPDATE SET COLUMNA = S.COLUMNA, COLUMNB = S.COLUMNB
WHEN NOT MATCHED BY TARGET
    THEN INSERT(COLUMNA, COLUMNB) VALUES (S.COLUMNA, S.COLUMNB)
WHEN NOT MATCHED BY SOURCE
    THEN DELETE;