我正在使用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
这里的问题是我没有唯一的列可以加入,这样每列都会得到一个独特的结果......所以在我看来。请帮忙? :(
答案 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
希望这对我有很大帮助。