2016-04-26 550 views
0

我正在使用DB2,并且是SQL中的初学者。我这里有两个表:DB2的UPDATE JOIN语句

表1:

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

表2:

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

表2和表1有不同数量的记录。 Table2.SCRID对应于Table1.ID。 我想根据SRCID更新Table2中的PageID以遵循Table1的PageID中陈述的内容。 表2的我的最终结果应该是:

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

如何为DB2这样做在SQL?

我想:

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

试试这个:我已经添加

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子句,以防止NULL分配给PAGEID表2

+0

这工作致谢:) – evkwan

+0

@evkwan:有一个愉快的一天;)! –