通过比较两个表来更新 SQL 查询

Posted

技术标签:

【中文标题】通过比较两个表来更新 SQL 查询【英文标题】:Update SQL query by comparing two table 【发布时间】:2015-09-01 06:42:27 【问题描述】:

如何通过比较两个表来更新sql列中的查询?这可能是重复的问题,但仍然无法解决我的问题。任何帮助将不胜感激。

到目前为止我已经尝试过,但是错误

UPDATE b SET b.STAMP = b.STAMP + 10 FROM TB_FWORKERSCH b,TB_FWORKERCN a 
WHERE a.ISSDATE>='20150401' AND a.UKEY=b.UKEY2 and b.STAMP=0 AND b.IG_SUMINS!=0

DB2 数据库

【问题讨论】:

尝试 UPDATE b SET... 而不是 UPDATE TB_FWORKERSCH b 试过了。错误 -> 该命令被作为 SQL 语句处理,因为它不是有效的命令行处理器命令 AND b.IG_SUMINS0 而不是 AND b.IG_SUMINS!=0 【参考方案1】:

DB2 不允许 JOIN 或 FROM 用于 UPDATE 子句(这在 SQL 标准中也没有指定)。

您可以使用相关的子查询来实现您想要的:

UPDATE tb_fworkersch b
  SET stamp = stamp + 10 
WHERE EXISTS (SELECT 1 
              FROM tb_fworkercn a 
              WHERE a.issdate >= '20150401' 
                AND a.ukey = b.ukey2) 
AND b.stamp = 0
AND b.ig_sumins <> 0

【讨论】:

【参考方案2】:

试试这个:

MERGE INTO TB_FWORKERSCH b 
USING TB_FWORKERCN a
   ON a.UKEY=b.UKEY2
   AND a.ISSDATE>='20150401' AND b.STAMP=0 AND b.IG_SUMINS<>0
WHEN MATCHED
   THEN UPDATE SET b.STAMP = b.STAMP + 10;

【讨论】:

hmm .. 错误 -> 在“B.STAMP = B.STAMP +”之后发现了一个意外的令牌“10 FROM TB_FWORKERSCH b INNER JOIN TB_”。 @user3835327:- 更新了我的答案。请检查!

以上是关于通过比较两个表来更新 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

需要通过比较两个表来显示 Total Customer 的 MAX COUNT

如何通过比较两个表来获得工作日数?

通过连接不同服务器上两个数据库中的两个表来查询数据

通过从 sql server 加入表来更新访问表

Oracle:如何通过将子查询删除到条件或加入同一张表来提高查询?

通过 linq 对实体查询进行分组,以通过加入表来获取具有最新时间戳的一条记录