在单个语句中同时使用 UPDATE 和 JOIN
Posted
技术标签:
【中文标题】在单个语句中同时使用 UPDATE 和 JOIN【英文标题】:Using an UPDATE and JOIN together in a single statement 【发布时间】:2015-01-15 23:02:39 【问题描述】:我在写的这个声明中不断出现错误,想知道是否有人可以提供帮助。我有两张桌子。表 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];
但我不断返回我无法识别的语法错误。
【问题讨论】:
我们也无法识别它,因为您没有包含错误![Table A].[Table 3]='value3'
应该是什么意思?
在你的 WHERE 子句中,[Table B].[Column 2] 之后应该有 sth
究竟是什么?
检查this answer 是否有非常相似的问题。 @sqluser 的意思是你也错过了 [Table B].[Column 2]
- 的比较,除非它是一个布尔列。
【参考方案1】:
您在INNER JOIN
之前缺少FROM
子句。加入在SELECT
、UPDATE
或DELETE
上的工作方式相同。试试这样:
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];
(未经测试,但它应该可以完成这项工作)
【讨论】:
我也尝试过此操作,但在查询表达式中收到语法错误(缺少运算符)。它在我的 SET 语句的结尾和我的 FROM 语句的开头之间声明。 对不起,我在想 T-Sql。访问语法似乎有所不同。【参考方案2】:这会将值从源表 (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;
【讨论】:
我通常会使用合并语句,但遗憾的是 T-SQL 在访问中没有我希望的那样工作哈哈,但感谢您的建议!以上是关于在单个语句中同时使用 UPDATE 和 JOIN的主要内容,如果未能解决你的问题,请参考以下文章
mysql update 的时候使用left join和where语句