免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2281 | 回复: 6
打印 上一主题 下一主题

update语句不会写了!郁闷 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-10 20:57 |只看该作者 |倒序浏览
有两个表,test1和test2,字段是一样,分别为code,dev,现在test1中有三条记录('','1'),('','2'),('','3'),test2中有两条记录('11','1'),('22',2'),怎么把test2中的code更新到test1中?不会写了

请指点一下

论坛徽章:
0
2 [报告]
发表于 2008-01-10 21:41 |只看该作者
哈哈,今天刚刚学的meger, 用一下:

merge into test1
using test2
on (test1.dev = test2.dev)
when matched then
  update set test1.code = test2.code
when not matched then
  insert values (test2.code, test2.dev)

论坛徽章:
0
3 [报告]
发表于 2008-01-10 22:36 |只看该作者
谢谢!测试成功,但test2中不能有重复记录,否则会报错

论坛徽章:
0
4 [报告]
发表于 2008-01-11 08:28 |只看该作者

回复 #1 lhbzp 的帖子

update test1 a
set a.code=
(select code from test2 where dev=a.dev)

论坛徽章:
0
5 [报告]
发表于 2008-01-11 09:58 |只看该作者

回复 #4 刚睡醒的飘过 的帖子

这样是不对的,你可以测试一下

论坛徽章:
0
6 [报告]
发表于 2008-01-11 11:19 |只看该作者

回复 #5 lhbzp 的帖子

可以啊

create table test1
(
    code        varchar2(10),
        dev     varchar2(10)
)

create table test2 as select * from test1;

INSERT INTO TEST1 ( CODE, DEV ) VALUES (
NULL, '1');
INSERT INTO TEST1 ( CODE, DEV ) VALUES (
NULL, '2');
INSERT INTO TEST1 ( CODE, DEV ) VALUES (
NULL, '3');

INSERT INTO TEST2 ( CODE, DEV ) VALUES (
'dd', '1');
INSERT INTO TEST2 ( CODE, DEV ) VALUES (
'qw', '2');


update test1 a
set a.code=
(select code from test2 where dev=a.dev);

难道对题目的理解有问题

论坛徽章:
0
7 [报告]
发表于 2008-01-14 00:47 |只看该作者
原帖由 刚睡醒的飘过 于 2008-1-11 11:19 发表
可以啊

create table test1
(
    code        varchar2(10),
        dev     varchar2(10)
)

create table test2 as select * from test1;

INSERT INTO TEST1 ( CODE, DEV ) VALUES (
NULL, '1');
INSERT  ...

这样会把a表匹配不到的字段更新成null

update
(select * from test1 a where dev in
  (select dev from test2 )
) c
set code =(select code from test2 where dev =c.dev)
或者
 update
   test1  a
   set a.code=(select code from test2 where dev=a.dev)
   where exists(select 1 from test2 where dev = a.dev)

如果dev相同有两个不同的code肯定会出错,可以根据需要用分析函数筛选一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP