首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 两表间的数据更新 [已结贴,结贴人:wai631]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-11 19:51:16 楼主
    有两个表:A、B

    create table a( Aid char(2), ch char(1))
    create table b( Bid char(2), ch char(1))

    insert into a values(1, 'a'); 
    insert into a values(2, 'b'); 
    insert into a values(6, 'c');
    insert into a values('', 'd');


    insert into b values(1, '3'); 
    insert into b values(2, '4');
    insert into b values(3, '5');
    insert into b values(4, '6');
    insert into b values('', '7');
    insert into b values('', '8');

    update a set a.ch = (select b.ch from b where a.Aid = b.Bid);
    以A表的Aid与B表的Bid为条件(Aid=Bid,除去空的),更新A表的CH列,怎么写SQL?
    请高手帮帮忙!

    我是这样写的,但是错了
    update a set a.ch = (select b.ch from b where a.Aid = b.Bid)

    消息 512,级别 16,状态 1,第 1 行
    子查询返回的值不止一个。当子查询跟随在 =、!=、 <、 <=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
    语句已终止。
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-11 20:00:171楼 得分:15
    SQL code
    create table a( Aid char(2), ch char(1)) create table b( Bid char(2), ch char(1)) insert into a values(1, 'a'); insert into a values(2, 'b'); insert into a values(6, 'c'); insert into a values('', 'd'); insert into b values(1, '3'); insert into b values(2, '4'); insert into b values(3, '5'); insert into b values(4, '6'); insert into b values('', '7'); insert into b values('', '8'); update a set a.ch = b.ch from a join b on a.Aid = b.Bid where a.aid<>''


    1 3
    2 4
    6 c
      d
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liangCK
    • 等级:
    发表于:2008-03-11 20:01:002楼 得分:10
    SQL code
    create table a( Aid char(2), ch char(1)) create table b( Bid char(2), ch char(1)) insert into a values(1, 'a'); insert into a values(2, 'b'); insert into a values(6, 'c'); insert into a values('', 'd'); insert into b values(1, '3'); insert into b values(2, '4'); insert into b values(3, '5'); insert into b values(4, '6'); insert into b values('', '7'); insert into b values('', '8'); update a set a.ch = b.ch from a join b on a.Aid = b.Bid where a.aid<>''
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-11 20:49:593楼 得分:5
    update a set a.ch=(select top 1 ch from b where bid=a.aid) where isnull(a.aid,'') <>''
    --even if multy rows
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-11 21:26:304楼 得分:5
    SQL code
    update a set ch = b.ch from a,b where a.Aid = b.Bid and a.aid<>''
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    发表于:2008-03-11 21:52:225楼 得分:5
    SQL code
    create table a( Aid char(2), ch char(1)) create table b( Bid char(2), ch char(1)) insert into a values(1, 'a'); insert into a values(2, 'b'); insert into a values(6, 'c'); insert into a values('', 'd'); insert into b values(1, '3'); insert into b values(2, '4'); insert into b values(3, '5'); insert into b values(4, '6'); insert into b values('', '7'); insert into b values('', '8'); go update a set a.ch = b.ch from a, b where a.aid = b.bid and a.aid <> '' ; select * from a drop table a,b /* Aid ch ---- ---- 1 3 2 4 6 c d (所影响的行数为 4 行) */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    发表于:2008-03-11 21:53:516楼 得分:5
    SQL code
    --楼主的写法更改为如下: create table a( Aid char(2), ch char(1)) create table b( Bid char(2), ch char(1)) insert into a values(1, 'a'); insert into a values(2, 'b'); insert into a values(6, 'c'); insert into a values('', 'd'); insert into b values(1, '3'); insert into b values(2, '4'); insert into b values(3, '5'); insert into b values(4, '6'); insert into b values('', '7'); insert into b values('', '8'); go update a set a.ch = isnull((select b.ch from b where a.Aid = b.Bid),a.ch) where a.aid <> '' select * from a drop table a,b /* Aid ch ---- ---- 1 3 2 4 6 c d (所影响的行数为 4 行) */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-11 21:56:197楼 得分:5
    SQL code
    update a set ch=b.ch from a,b where a.aid=b.bid --或者加上top 1 update a set a.ch = (select top 1 b.ch from b where a.Aid = b.Bid)
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved