DB2

时间:2016-04-26 10:57:55

标签: database join sql-update db2

我正在使用DB2,并且是SQL的初学者。我这里有两张桌子:

表1:

ID | PageID 
------------
1  |   101  
2  |   102
3  |   103
4  |   104

表2:

ID | SRCID | PageID
--------------------
1  |  2    | 179
2  |  3    | 103
3  |  3    | 109

Table2和Table1有不同的记录数。 Table2.SCRID对应于Table1.ID。 我想更新Table2中的PageID,以遵循基于SRCID的Table1的PageID中所述的内容。 我的最终结果应该是:

ID | SRCID | PageID
--------------------
1  |  2    | 102
2  |  3    | 103
3  |  3    | 103

如何在SQL for DB2中执行此操作?

我试过了:

UPDATE table2
  SET PageID = (SELECT t1.PageID from table1 as t1 join table2 as t2
      WHERE t2.SCRID = t1.ID);

但是上面的内容并没有起作用:

DB21034E该命令作为SQL语句处理,因为它不是 有效的命令行处理器命令。在SQL处理期间,它返回: SQL0811N标量全查询,SELECT INTO语句或VALUES的结果 INTO语句不止一行。 SQLSTATE = 21000

这里的问题是我没有唯一的列可以加入,这样每列都会得到一个独特的结果......所以在我看来。请帮忙? :(

2 个答案:

答案 0 :(得分:0)

试试这个:

UPDATE table2
SET table2.PageID = 
    (SELECT t1.PageID
    FROM table1 t1
   WHERE t1.id = table2.SCRID)
WHERE EXISTS(
    SELECT 'TABLE1PAGE'
    FROM table1 t1
    WHERE t1.id = table2.SCRID)

我添加了EXISTS子句以防止对table2的PageID的NULL赋值

答案 1 :(得分:0)

作为SQL Server的忠实拥护者,我一直在为DB2似乎无法使用另一个表中的信息来更新表而苦苦挣扎-在SSMS中使用join进行更新非常容易。

我终于找到了一种可以正常运行的替代方法:MERGE语句。我通常会发现IBM的支持文档难以理解,或者至少不友好阅读,但是在MERGE网站上的解释实际上非常清楚:https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_71/sqlp/rbafymerge.htm

希望这对我有很大帮助。