【问题标题】:How do I write an SQL statement (for DB2) to update a table with these conditions?如何编写一条 SQL 语句(对于 DB2)来更新具有这些条件的表?
【发布时间】:2014-05-12 08:53:45
【问题描述】:

这是我需要做的:

对于 Table1 中 Name 不为 null 或空白且 Table2 有与 Name 匹配的行的每一行,将 Table1 中的另一列替换为 Table2 中的列的内容,并将表 1 中的名称设置为 null。

我似乎无法将这种逻辑融入 SQL。

我真的不在乎 Table2 是否有多个名称匹配的行,只要抓住第一行就足够了。

【问题讨论】:

  • 考虑thisthis
  • 我必须问一个问题...我能够使用第一个链接中的语法来成功更新列,但是现在当我尝试将 Name 设置为 null 时,只要另一列不为 null ,我收到“带有诊断文本的应用程序引发错误:无效的分支 ID”。 Google 不知道这意味着什么。
  • 这是您的应用程序自定义异常。显然您的其他列,可能称为BRANCH_ID 或类似名称,不能为空。在将错误消息粘贴到 Google 之前实际阅读它们通常很有用。
  • 不叫branch id,数据库中没有出现branch这个词,该列可以为null。
  • 然后检查您的应用程序代码(例如可能是触发器),看看它认为什么是有效的分支 ID。

标签: sql db2


【解决方案1】:

DB2 中,您可以使用MERGE 语句来完成这项工作

MERGE INTO Table1 A
USING Table2 B
     on A.name=B.name  
WHEN MATCHED
   THEN UPDATE SET A.another_column=B.Table2_Column
    , A.name=NULL;

在 T-Sql 中 您可以使用 UPDATE 语句和只影响匹配行的连接条件,如下所示:

Update A
set A.another_column=B.Table2_Column
, A.name=NULL
From Table1 A
inner join Table2 B
on A.name=B.name
Where isnull(A.name,'')<>''

【讨论】:

  • 此 SQL 语句在 DB2 中无效。
  • 这有什么问题?看起来像 ifnull 替换 isnull -- stackoverflow.com/questions/65071/isnull-function-in-db2-sql
  • 我在“Table2”处收到错误——非法符号“Table2”。一些可能是合法的符号是:(。SQLCODE=-104,SQLSTATE=42601,DRIVER=3.63.75 SQL 代码:-104,SQL 状态:42601
  • 问题标记为 DB2。为什么要包含 T-SQL 答案?
猜你喜欢
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2011-05-10
  • 1970-01-01
  • 2019-01-12
  • 2012-08-15
  • 2020-11-30
相关资源
最近更新 更多