首页  电脑故障排除  病毒安全 电脑基础知识  硬件知识  软件应用知识  操作系统知识  编程程序

美国编程网址 日本编程网址 法国编程网址 德国编程网址 韩国编程网址 香港编程网址 台湾编程网址

您的位置:首页>>编程程序>>Oracle

请各位指教:如何用sql语句更新两个表之间的数据,紧急求助~~

 
请各位指教:如何用sql语句更新两个表之间的数据,紧急求助~~
  
  在sqlplus里有两个表,number表字段有tel_no,gh表字段有old_tel,new_tel,两个表的tel_no和old_tel一一对应,现在我需要把number表里的tel_no更新成gh里的new_tel
应该如何写语句
updatenumbersettel_no=gh.new_telfromnumber,ghwherenumber.tel_no=gh.old_new
我写的这个语句执行不了,请各位指点一下,应该如何做?
不胜感谢~:
  
  
  
  edwin 回复于:2003-10-17 15:44:54
updatenumbersettel_no=(selectgh.new_telfromnumber,ghwherenumber.tel_no=gh.old_new)
Erics 回复于:2003-10-17 15:54:47
edwin,谢谢你的回应,但这两个表是多行数据,select的new_tel返回多行值,无法执行,该怎么办呢
CCBZZP 回复于:2003-10-17 15:57:58
加GROUPBY
Erics 回复于:2003-10-17 16:15:42
groupby应该加在位置,不好意思~~
edwin 回复于:2003-10-17 16:19:37
updatenumbersettel_no=(selectdistinctgh.new_telfromghwherenumber.tel_no=gh.old_new)
这样就确保不会出错了
CCBZZP 回复于:2003-10-17 16:27:29
樓上的也可以的
Erics 回复于:2003-10-17 16:38:20
我想我可能表达错了,数据没有重复
两个表的数据是这样的,如:number的tel_no有2222,3333
gh的old_tel为2222,3333,new_tel分别是22,33
现在我要把number的tel_no更新成gh里对应的22,33
用distinct返回的还是多行值,怎么办呢?
jf 回复于:2003-10-17 16:54:52
[quote:a292f25e14="Erics"]我想我可能表达错了,数据没有重复
两个表的数据是这样的,如:number的tel_no有2222,3333
gh的old_tel为2222,3333,new_tel分别是22,33
现在我要把number的tel_no更新成gh里对应的22,33
用distinct返回的?.........[/quote:a292f25e14]
用mergeinto可以实现
edwin 回复于:2003-10-17 16:57:41
晕,那就说old_tel不是一一对应的了,比如old_tel有两行为2222对应new_tel分别有22,33,只有这样的情况我的语句才会抱返回多行错误。
是一对多,我怎么知道你要的是22还是33
Erics 回复于:2003-10-17 17:05:19
toedwin:
不是的,old_tel跟number的tel_no一一相同,同时old_tel对应new_tel也没有重复值,用selectdistinct返回的多行值是new_tel的多个值,但不是重复值,数据格式大至如下,我想要根据old_tel,把tel_no更新成对应的new_tel
numbergh
tel_noold_telnew_tel
2222222222
3333333333
4444444466
tojf:
不知道mergeinto语句具体怎么写,这个命令我没用过
jf 回复于:2003-10-17 17:19:04
[quote:73471264a2="Erics"]在sqlplus里有两个表,number表字段有tel_no,gh表字段有old_tel,new_tel,两个表的tel_no和old_tel一一对应,现在我需要把number表里的tel_no更新成gh里的new_tel
应该如何写语句
updatenumbersettel_no=gh...........[/quote:73471264a2]
jf 回复于:2003-10-17 17:21:54
[quote:48b29f02f0="Erics"]在sqlplus里有两个表,number表字段有tel_no,gh表字段有old_tel,new_tel,两个表的tel_no和old_tel一一对应,现在我需要把number表里的tel_no更新成gh里的new_tel
应该如何写语句
updatenumbersettel_no=gh...........[/quote:48b29f02f0]
mergeintonumber
usinggh
onnumber.tel_no=gh.old_tel
whenmatchedthen
updateset
number.tel_no=gh.new_tel
whennotmatchedthen
insert(tel_no)
values(gh.new_tel);
应该能解决你的问题。(但必须是oracle9i)
Erics 回复于:2003-10-17 17:40:49
我这边是oracle8,,执行后提示“无效的语句”
有没有其他的办法了?
edwin 回复于:2003-10-17 17:42:39
我刚测试了我的语句,肯定可以的,你看看有没有写错啊
rollingpig 回复于:2003-10-17 17:51:15
updatenumberset(tel_no,old_tel)=(selectdistinctgh.new_tel,gh.old_telfromghwherenumber.tel_no=gh.old_new)
multycolumn罢了
jf 回复于:2003-10-17 17:58:53
那只好编个block,用游标循环更新。
Erics 回复于:2003-10-17 18:04:54
updatenumbersettel_no=(selectdistinctgh.new_telfromghwherenumber.tel_no=gh.old_new)
执行这条语句后提示“无法更新tel_no为null"
这条语句select返回的是空值
updatenumbersettel_no=(selectdistinctgh.new_telfromgh,numberwherenumber.tel_no=gh.old_new)
但我在select...语句的from里加入number后再执行又提示“子查询返回多行值”
很着急呀,还有没有办法呀
tojf:
用游标更新不知道语句应该怎么写请指点
cxt442 回复于:2003-10-17 20:22:53
我试试看
lm027 回复于:2003-10-19 16:56:42
updatenumbera
settel_no=(selectnew_telfromghwhereold_new=a.tel_no);
ifold_newisnotunique,uesthissql
updatenumbera
settel_no=(selectnew_telfromghwhereold_new=a.tel_no
andrownum=1);
cxt442 回复于:2003-10-20 08:33:09
我有两个表,DFDL_USER_INFO_02A和JL_METER_RUNNING02B其中A中的列USER—ID和B中的USER—NO是一一对应的,我在PB下自动生成了如下语句,结果提示[/img]
SELECT"JL_METER_RUNNING02"."ELEC_TYPE_CODE",
"JL_METER_RUNNING02"."USER_NO",
"JL_METER_RUNNING02"."USER_NAME"
FROM"JL_METER_RUNNING02"
WHERE("JL_METER_RUNNING02"."USER_NO"=(SELECT"DFDL_USER_INFO_02"."USER_ID"
FROM"DFDL_USER_INFO_02"&nbsp)AND
("JL_METER_RUNNING02"."ELEC_TYPE_CODE"<>(SELECT"DFDL_USER_INFO_02"."YDXZ_ID"
FROM"DFDL_USER_INFO_02"&nbsp);
txfy 回复于:2003-10-20 08:59:04
[quote:fbb69c1aef="edwin"]updatenumbersettel_no=(selectgh.new_telfromnumber,ghwherenumber.tel_no=gh.old_new)[/quote:fbb69c1aef]
楼主老大这个语句应该不会有问题吧!他的number.tel_no=gh.old_new已经限定了,只会选相应的进行修改。不要想象,你执行一次就知道了!
Erics 回复于:2003-10-20 09:17:44
我执行过了,提示如下:
ORA-01427:单行子查询返回多于一个行
因为我的number和gh表里值是多行一一对应的,所以总是返回多行值,怎么样限制呢
txfy 回复于:2003-10-20 11:02:02
try
updatenumbersettel_no=(selectgh.new_telfromnumber,ghwherenumber.tel_no=gh.old_new)wherenumber.tel_no=gh.old_new
Erics 回复于:2003-10-20 11:55:54
楼上的
我试了你写的语句,提示“无效列名”
。。。wherenumber.tel_no=gh.old_new
(提示gh.old_new为无效列名)
jimijiao 回复于:2003-10-20 15:07:53
建议使用游标,这样会好些
Erics 回复于:2003-10-20 15:19:40
tojimijiao
游标我不太会
可以指点一下怎么写吗,可以在QQ上或是MSN上直接与你交流吗
jf 回复于:2003-10-21 21:24:40
查查书
edwin 回复于:2003-10-22 09:14:49
老大你到底懂不懂点SQL啊
lm027 回复于:2003-10-23 21:06:34
readthis
[url]http://chinaunix.net/jh/19/144785.html[/url]
  

查看上一页  返回分类首页 返回96PC首页  查看下一页

  版权所有:电脑知识大全 网站备案:粤ICP备07031496号  联系我们

友情链接:母婴知识  外贸商务网  娱乐频道  汽车维修知识  股票入门知识  游戏攻略秘籍  本站空间由安信网络提供