表A:KCH05_TEST
组织 年度 月份 仓库 物品 出库数量
XTDWDM XTCZND XTHSQM KCCKDM KCWPDM KCCKSL
I3 2005 01 00 BJ21100003 22222
I3 2005 01 00 BZ00000001 88888
I3 2005 01 01 BZ00000152 2336
I3 2005 01 01 BZ21100019 49962
I3 2005 01 01 YS21100020 38000
--------------------------------------------------------
表B:KCH6SUM05Y
组织 月份 类型 仓库 物品 操作数量
XTDWDM XTHSQM XTCZLX KCCKDM KCWPDM KCCZSL
I3 01 C 00 BJ21100003 10984
I3 01 C 01 BZ00000152 2336
I3 01 C 01 BZ21100019 49962
I3 01 C 01 YS21100020 38000
想将表A中“出库数量”与表B中“操作数量”不同的用表B的“操作数量”替换,前提是“组织”、“月份”、“仓库”、“物品”相同的情况下。
本人的第一种方法如下:
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
上面的语句可以达到预期要求,但我想换成如下第二种方法替换却不行:
UPDATE KCH05_TEST SET KCCKSL=(SELECT B.KCCZSL FROM KCH6SUM05Y B WHERE kch05_test.XTDWDM=B.XTDWDM AND kch05_test.XTHSQM=B.XTHSQM AND kch05_test.KCCKDM=B.KCCKDM AND kch05_test.KCWPDM=B.KCWPDM)
不是小弟钻牛角尖,因为我的环境是IBM DB2,我用第一种方法在DB2 里运行不能支持,故我的问题如下:
(1)第一种方法在DB2环境下怎么写?
(2)第二种方法在MS SQLSERVER环境下怎么改?
谢谢大家!
19 个解决方案
#1
2,加个条件就是了:
UPDATE KCH05_TEST SET KCCKSL=(SELECT B.KCCZSL FROM KCH6SUM05Y B WHERE kch05_test.XTDWDM=B.XTDWDM AND kch05_test.XTHSQM=B.XTHSQM AND kch05_test.KCCKDM=B.KCCKDM AND kch05_test.KCWPDM=B.KCWPDM)
where exists(SELECT * FROM KCH6SUM05Y B WHERE kch05_test.XTDWDM=B.XTDWDM AND kch05_test.XTHSQM=B.XTHSQM AND kch05_test.KCCKDM=B.KCCKDM AND kch05_test.KCWPDM=B.KCWPDM)
UPDATE KCH05_TEST SET KCCKSL=(SELECT B.KCCZSL FROM KCH6SUM05Y B WHERE kch05_test.XTDWDM=B.XTDWDM AND kch05_test.XTHSQM=B.XTHSQM AND kch05_test.KCCKDM=B.KCCKDM AND kch05_test.KCWPDM=B.KCWPDM)
where exists(SELECT * FROM KCH6SUM05Y B WHERE kch05_test.XTDWDM=B.XTDWDM AND kch05_test.XTHSQM=B.XTHSQM AND kch05_test.KCCKDM=B.KCCKDM AND kch05_test.KCWPDM=B.KCWPDM)
#2
晕!
大哥,第二种写法还能再简化的么?
大哥,第二种写法还能再简化的么?
#3
表B的“组织”、“月份”、“仓库”、“物品”与A表存在相同记录的情况下才去更新A表,有那么多条件,没法再简化了。
#4
(1)第一种方法在DB2环境下怎么写?
----------------------------------------
不是吧,DB2难道不支持这么简单的语法?
(2)按风云的写法了
----------------------------------------
不是吧,DB2难道不支持这么简单的语法?
(2)按风云的写法了
#5
update tb1 set field='value' from tb1 inner join tb2 on tb1.a1=tb2.a1
#6
needkey(一头雾水) :
第一种写法在DB2 里不行,提示:“未定义列限定词或表 B ”
huwei2003(凡) :
看不懂,什么意思啊?
第一种写法在DB2 里不行,提示:“未定义列限定词或表 B ”
huwei2003(凡) :
看不懂,什么意思啊?
#7
up
#8
(2)第二种方法在MS SQLSERVER环境下怎么改?
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A Inner JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A Inner JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
#9
Softlee81307(孔腎):
这不就是我的第一种写法么?
我想问的是UPDATE A SET A.KCCKSL=(SELECT B.KCCZSL。。。。)这种写法以前见过的好像不用在句尾加 where exists 子句,可今天如果不加该子句则不能通过,提示:
“无法将 NULL 值插入列 'KCCKSL',表 'KCH05_TEST';该列不允许空值。UPDATE 失败。”
另外,(1)第一种方法在DB2环境下怎么写?若有人知道小弟另开贴送50分
(注:CSDN DB2那版没人气,不想在那问)
这不就是我的第一种写法么?
我想问的是UPDATE A SET A.KCCKSL=(SELECT B.KCCZSL。。。。)这种写法以前见过的好像不用在句尾加 where exists 子句,可今天如果不加该子句则不能通过,提示:
“无法将 NULL 值插入列 'KCCKSL',表 'KCH05_TEST';该列不允许空值。UPDATE 失败。”
另外,(1)第一种方法在DB2环境下怎么写?若有人知道小弟另开贴送50分
(注:CSDN DB2那版没人气,不想在那问)
#10
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A Inner JOIN ----這裡加inner 就行了
KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
#11
在sql server中
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A Inner JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A Inner JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM
#12
“无法将 NULL 值插入列 'KCCKSL',表 'KCH05_TEST';该列不允许空值。UPDATE 失败。”
則稍改一點
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A Inner JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM
where B.KCCZSL is not null
則稍改一點
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A Inner JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM
where B.KCCZSL is not null
#13
改写成标准SQL:
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A, KCH6SUM05Y B where A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A, KCH6SUM05Y B where A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
#14
Softlee81307(孔腎) :
Inner Join 和 Join 都是内联接嘛,一个道理啊,和我第一种写法一样的嘛
第一种写法在MS-Sqlserver中已测试通过了,只是想将这种写法应用到DB2中去却不能通过
Inner Join 和 Join 都是内联接嘛,一个道理啊,和我第一种写法一样的嘛
第一种写法在MS-Sqlserver中已测试通过了,只是想将这种写法应用到DB2中去却不能通过
#15
pbsql(风云):
我用你的方法在MS-Sqlserver中已测试通过,可在DB2中测试还是没有通过(提示:表 KCH05_test 的列 KCCKSL 中不允许有空值)
我的最终目的是要DB2中完成这种更新,老大你还有其它招么?
我用你的方法在MS-Sqlserver中已测试通过,可在DB2中测试还是没有通过(提示:表 KCH05_test 的列 KCCKSL 中不允许有空值)
我的最终目的是要DB2中完成这种更新,老大你还有其它招么?
#16
weihthchk(Spectrum):
谢谢,你的方法在MS-SQLSERVER中可以通过,不过不是我想要的
谢谢,你的方法在MS-SQLSERVER中可以通过,不过不是我想要的
#17
没搞过DB2,帮你顶下
#18
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
上面这种写法在IBM DB2中怎么写,有没人知道,答完立即结贴!
上面这种写法在IBM DB2中怎么写,有没人知道,答完立即结贴!
#19
没用过DB2
#20
#1
2,加个条件就是了:
UPDATE KCH05_TEST SET KCCKSL=(SELECT B.KCCZSL FROM KCH6SUM05Y B WHERE kch05_test.XTDWDM=B.XTDWDM AND kch05_test.XTHSQM=B.XTHSQM AND kch05_test.KCCKDM=B.KCCKDM AND kch05_test.KCWPDM=B.KCWPDM)
where exists(SELECT * FROM KCH6SUM05Y B WHERE kch05_test.XTDWDM=B.XTDWDM AND kch05_test.XTHSQM=B.XTHSQM AND kch05_test.KCCKDM=B.KCCKDM AND kch05_test.KCWPDM=B.KCWPDM)
UPDATE KCH05_TEST SET KCCKSL=(SELECT B.KCCZSL FROM KCH6SUM05Y B WHERE kch05_test.XTDWDM=B.XTDWDM AND kch05_test.XTHSQM=B.XTHSQM AND kch05_test.KCCKDM=B.KCCKDM AND kch05_test.KCWPDM=B.KCWPDM)
where exists(SELECT * FROM KCH6SUM05Y B WHERE kch05_test.XTDWDM=B.XTDWDM AND kch05_test.XTHSQM=B.XTHSQM AND kch05_test.KCCKDM=B.KCCKDM AND kch05_test.KCWPDM=B.KCWPDM)
#2
晕!
大哥,第二种写法还能再简化的么?
大哥,第二种写法还能再简化的么?
#3
表B的“组织”、“月份”、“仓库”、“物品”与A表存在相同记录的情况下才去更新A表,有那么多条件,没法再简化了。
#4
(1)第一种方法在DB2环境下怎么写?
----------------------------------------
不是吧,DB2难道不支持这么简单的语法?
(2)按风云的写法了
----------------------------------------
不是吧,DB2难道不支持这么简单的语法?
(2)按风云的写法了
#5
update tb1 set field='value' from tb1 inner join tb2 on tb1.a1=tb2.a1
#6
needkey(一头雾水) :
第一种写法在DB2 里不行,提示:“未定义列限定词或表 B ”
huwei2003(凡) :
看不懂,什么意思啊?
第一种写法在DB2 里不行,提示:“未定义列限定词或表 B ”
huwei2003(凡) :
看不懂,什么意思啊?
#7
up
#8
(2)第二种方法在MS SQLSERVER环境下怎么改?
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A Inner JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A Inner JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
#9
Softlee81307(孔腎):
这不就是我的第一种写法么?
我想问的是UPDATE A SET A.KCCKSL=(SELECT B.KCCZSL。。。。)这种写法以前见过的好像不用在句尾加 where exists 子句,可今天如果不加该子句则不能通过,提示:
“无法将 NULL 值插入列 'KCCKSL',表 'KCH05_TEST';该列不允许空值。UPDATE 失败。”
另外,(1)第一种方法在DB2环境下怎么写?若有人知道小弟另开贴送50分
(注:CSDN DB2那版没人气,不想在那问)
这不就是我的第一种写法么?
我想问的是UPDATE A SET A.KCCKSL=(SELECT B.KCCZSL。。。。)这种写法以前见过的好像不用在句尾加 where exists 子句,可今天如果不加该子句则不能通过,提示:
“无法将 NULL 值插入列 'KCCKSL',表 'KCH05_TEST';该列不允许空值。UPDATE 失败。”
另外,(1)第一种方法在DB2环境下怎么写?若有人知道小弟另开贴送50分
(注:CSDN DB2那版没人气,不想在那问)
#10
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A Inner JOIN ----這裡加inner 就行了
KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
#11
在sql server中
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A Inner JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A Inner JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM
#12
“无法将 NULL 值插入列 'KCCKSL',表 'KCH05_TEST';该列不允许空值。UPDATE 失败。”
則稍改一點
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A Inner JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM
where B.KCCZSL is not null
則稍改一點
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A Inner JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM
where B.KCCZSL is not null
#13
改写成标准SQL:
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A, KCH6SUM05Y B where A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A, KCH6SUM05Y B where A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
#14
Softlee81307(孔腎) :
Inner Join 和 Join 都是内联接嘛,一个道理啊,和我第一种写法一样的嘛
第一种写法在MS-Sqlserver中已测试通过了,只是想将这种写法应用到DB2中去却不能通过
Inner Join 和 Join 都是内联接嘛,一个道理啊,和我第一种写法一样的嘛
第一种写法在MS-Sqlserver中已测试通过了,只是想将这种写法应用到DB2中去却不能通过
#15
pbsql(风云):
我用你的方法在MS-Sqlserver中已测试通过,可在DB2中测试还是没有通过(提示:表 KCH05_test 的列 KCCKSL 中不允许有空值)
我的最终目的是要DB2中完成这种更新,老大你还有其它招么?
我用你的方法在MS-Sqlserver中已测试通过,可在DB2中测试还是没有通过(提示:表 KCH05_test 的列 KCCKSL 中不允许有空值)
我的最终目的是要DB2中完成这种更新,老大你还有其它招么?
#16
weihthchk(Spectrum):
谢谢,你的方法在MS-SQLSERVER中可以通过,不过不是我想要的
谢谢,你的方法在MS-SQLSERVER中可以通过,不过不是我想要的
#17
没搞过DB2,帮你顶下
#18
UPDATE KCH05_TEST SET KCCKSL=B.KCCZSL FROM KCH05_TEST A JOIN KCH6SUM05Y B ON A.XTDWDM=B.XTDWDM AND A.XTHSQM=B.XTHSQM AND A.KCCKDM=B.KCCKDM AND A.KCWPDM=B.KCWPDM AND A.KCCKSL<>B.KCCZSL
上面这种写法在IBM DB2中怎么写,有没人知道,答完立即结贴!
上面这种写法在IBM DB2中怎么写,有没人知道,答完立即结贴!
#19
没用过DB2