爱问知识人 爱问教育 医院库

SQL菜鸟求助:在表和表之间传递数据

首页

SQL菜鸟求助:在表和表之间传递数据

如A、B两个表
现在需要把表A中的字段a1=表B中的字段b1
条件为两表中a2,b2字段内容相同。

我用update命令做不成功,可能命令格式有误
update A set a1=(select B.b1 from A,B
where A.a1=B.b1);

清帮忙改正下,多谢!

提交回答
好评回答
  • 2007-05-18 14:32:04
      请学长参考下面的写法(SYBASE):
    update A set a1 = B。b1 from A,B where A。a2=B。b2;
    学长的写法存在一定的错误。因为在括号之中的SQL,可能返回一个结果集,返回不止一个值,所以更新会不成功!
    --------------------------
    PS:楼下一片叶子学姐提醒的是,关于更新时一对一的关系比较严谨,我也未充分考虑(where条件没仔细看,写成a1和b1了,现已更正)。
      不过,上面的写法,语法上是正确的,UPDATE也可以成功。即使关联条件存在着一对多的关系也是如此,只不过,更新成功之后的数据,使用的多表中的逻辑第一条记录字段中的数据(多对多也是如此)。不过,也可以附加一些条件,来保证这种关系。(实际中,我做了一个A表一条记录,一个B表多条记录,SYBASE是成功的,SQL SERVER不好说。
      上面的话中,关于结果集的说法,也有点问题,和LZ所犯的错误,性质相同哈!) 另外,如果是多对一的更新,则多记录表中的更新字段都被更新为相同的值。 当然,SYBASE现在不支持TOP 1这样的语法,学姐使用TOP 1的语法,是想保证一对一的关联,是这样的意思吧? -------------------------- 又PS: 还好,机器中有ORACLE环境,稍微测试了一下。
      在ORACLE中的UPDATE语法中,首先不支持直接使用FROM,但是可以将FROM放在子查询之中。而且SET语法中的值,必须是唯一的,如果子查询中返回多行多个结果,肯定是不允许的。 下面的语法,是在LZ的数据,如果是一对一(包括可以使用distinct的重复)的关系,是可以正确执行的ORACLE语法,但是如果单纯依靠a2和b2相等,而产生不是一对一(同上)的关系,那么更新是不成功的! 所以建议LZ适当增加一个限制条件,以达到更新目的。
       //假定b1如果有相同值的重复,但是用distinct可以去除这种重复,但是如果B。b1有不同的值,那么distinct也是没用的 update A set a1 =(select distinct b1 from B where a2 = A。
      b2) where exists (select 1 from B where b2 = A。a2); //将A。a1 更新为子查询结果集中的第一个B。b1值,这个可能不是LZ所需要的效果,这个语句由于rownum,所以不怕有重复 update A set bb = ( select from A,B where = and rownum =1) ;。
      

    心***

    2007-05-18 14:32:04

其他答案

    2007-05-18 22:47:50
  • 关键是你的条件写错了. 天涯的条件也写错了.是不是可以用top 1 避免
    update A set a1=(select top 1 B.b1 from A,B
    where A.a2=B.b2)
    update A set a1 = B.b1 from A,B where A.a2=B.b2
     

    5***

    2007-05-18 22:47:50

类似问题

换一换
  • 数据库 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 177-196
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):