一条DB2 update sql语句认知错误

问题

最近在工作中执行db2的一条update sql语句时候,遇到错误:

1
2
3
db2 -v "update pts set (nam,adrblk)=(select adr.nam,adr.str from pta,adr where pts.ptainr=pta.inr and pta.objinr=adr.inr)"

SQL0407N Assignment of a NULL value to a NOT NULL column "TBSPACEID=9, TABLEID=79, COLNO=8" is not allowed. SQLSTATE=23502

原因

DB2中的update:
假设有表A,B两张表,有下列UPDATE语句:
UPDATE A SET col1 = (SELECT col1 FROM B WHERE A.col1 = B.col1)

对于上面的语句,表明是要对表A所有行的col1字段进行update:对满足WHERE A.col1 = B.col1的行,进行更新A.col1=B.col1;对不满足该条件的行,则对A.col1更新为=null。所以这里会对关联条件不匹配的行update null 值操作,但是字段定义是不可为 null 的,所以便有了上面的错误。

解决办法

修改sql语句,在外层给要更新的表记录限定where条件

1
db2 -v "update pts set (nam,adrblk)=(select adr.nam,adr.str from pta,adr where pts.ptainr=pta.inr and pta.objinr=adr.inr) where inr in(select pts.inr from pts,pta,adr  where pts.ptainr=pta.inr and pta.objinr=adr.inr)"
感谢您的阅读,本文由 雪释潮涯的博客~ 版权所有。如若转载,请注明出处: 雪释潮涯的博客~( https://www.xschaoya.com
Java集合学习总结
分享几个图片素材站

推荐阅读

留下足迹