A、B两个表,表A字段a、b,表b字段a、c,请问如何将A表b字段替换为B表c字段

请不要使用这个:update A set A.b=(select B.c from B where A.a=B.a),因为这个是有语法错误的哈

请哪位高手帮忙解决下,鄙人将十分感谢,很急很急哈
谢谢各位的解答!
问题我已经解决了哈,原来是因为A表的a字段不是唯一而造成的。希望大家能引以为戒哈!

第1个回答  2012-09-17
你写的语句没有错误,是其它别的地方出错了。
update A set b=(select c from B where a=A.a);追问

这个update A set A.b=(select B.c from B where A.a=B.a),的确是“要报单行子查询返回多个行”的错误,我都试了千万遍了,能帮忙解决一下吗

追答

把两个表的结构贴上来,再说一下修改要求,或许能帮你解决问题。

本回答被提问者采纳
第2个回答  2012-09-17
没有语法问题,如果这个语句报错,有可能是因为select B.c from B where A.a=B.a子句的查询结果返回多行造成的。
你可以试试这样写:
update A set A.b=(select B.c from B where A.a=B.a and rownum = 1)追问

嗯..的确是返回多行造成的,因为我要实现几千条数据的修改,所以我就只能想到这里了,加了rownum=1后,是可以实现修改,但是只能修改一部分,不知道为啥
还有其他办法解决吗

追答

你现在需要考虑的问题不是语句的写法,而是你想用什么值来更新,既然返回多行,就说明子查询查出的结果部位,用来更新的值都不唯一怎么能更新呢。你需要想法子找出条件来查出唯一的数据,因为这样的数据才是你想要更新的,否则的话就算所有数据全都更新了,也是错误的更新。

第3个回答  2012-09-25
update A set A.b=(select B.c from B)因为AB表没有关系!所以用where会出错!
第4个回答  2012-09-17
Update A Set A.b=B.c From A,B Where A.a=B.a追问

嗯..但是会把A表的其他值清空....这不是我希望的事,有啥好办法没?

追答

其它值?是指A表的b列的其它值吗?如果是,那加上条件: And B.c''
Update A Set A.b=B.c From A,B Where A.a=B.a And B.c''

第5个回答  2012-09-24
update A set A.b=(select top 1 B.c from B where A.a=B.a)

现有两张表A表a字段、B表b字段、AB两表都有字段c,以c字段作为关联,怎么...
但要保证在B表中C字段是唯一的才行。也就是说子查询只能返回一行数据。

SQL两个表A、B 如何把A中C列=B中C列
UPDATE `student` s,score c set s.score=c.score where s.id=c.studentid

EXCEL中,A列和B列两列数据,B列中包含大部分A列数据。如何提取A列中所不...
用VLOOKUP函数查找。如果能找出来的就不是你需要的数据。通过筛选值为“#N\/A”得到你的数据

如果a表中的A字段和b表中得B字段同时在c表中存在,则显示A字段和B字段...
如果c表只有一个C字段的话 select a.A,b.B from a,b,c c1,c c2 where a.A=c1.A and b.B=c2.B 或者 select a.A,b.B from a,b where exists (select * from c where a.A=c.C) and exists (select * from c where b.B=c.C)或者 select * from (select a.A from a...

依次输入字符串A、B、C,如果字符串A中包含B,则将A中的B部分替换成C?
int main(int argc,char *argv[]){ char A[N+N],B[N],C[N],t[N+N],*p;printf("Please enter the three strings...\\n");scanf("%s%s%s",A,B,C);if(p=strstr(A,B)){ strcpy(t,p+strlen(B));strcpy(p,C);strcat(A,t);printf("\\n%s\\n",A);} else printf("A not...

如何将SQL两个表中某一字段不一样的行筛选出来?
假设两个表A和B,如你所说:A比B的数据要多,找出A中多出的数据就用not in,col为他们的公共列 select * from A where col not in (select col from B)

有两张excel花名表:A和B,两张表里的人名都是一样的。怎么把B表的年龄数...
用vlookup函数,在a表的姓名后面插入空列(例如c列)在c1上输入公式vlookup,公式有四个参数。第一个参数选择所在行的姓名的单元格(a表姓名为b列,则选择b1);第二个参数选择b表从姓名到年龄的列的范围(姓名一定在前面,例如姓名是a列,年龄在d列,则选择a到d列--a:d),第三个参数选择b表...

表A, 表 B 。找到 表A中与表B中相同的记录。
select * from 表A where 表A字段=表B字段 但是表A字段和表B字段要有一个是相关联的.

excel工作中,有两个AB表,里面的人名字一样,但是顺序不一样,想把A表...
如果函数 VLOOKUP 找不到 lookup_value 且 range_lookup 为 FALSE,函数 VLOOKUP 返回错误值 #N\/A。示例 如果您将示例复制到空白工作表中,可能会更易于理解该示例。该示例使用 1 个大气压的空气值。1 2 3 4 5 6 7 8 9 10 A B C 密度 粘度 温度 .457 3.55 500 .525 3.25 400 .616...

EXCEL中,有两个表,表中有部分数据一样,怎样把相同数据的导到另外一...
1.我们把光标定位在需要展示数据的单元格中。2.在单元格中输入“=vl”,然后会自动提示出VLOOKUP函数,双击蓝色的函数部分。3.选择第一列中需要匹配数据的单元格,只选中一个就可以,然后输入英文状态下的逗号“,”。4.返回到第二张表,选中全部数据。5.因为我们要返回的是第二张表中第四列的班级...

相似回答