永发信息网

SQL表更新

答案:5  悬赏:10  手机版
解决时间 2021-02-07 12:49
  • 提问者网友:wodetian
  • 2021-02-06 11:54
表A有X和Y两列 表B也有X和Y两列 表A.X=B.X列 表B的Y列有许多空值,空值被数据库自动填充了6个空格 现在我要把表B的Y列空格的值改为表A的Y值,以A.X=B.X为判断条件。 update 表B set 表B.Y=(select Y fr担偿曹锻丨蹬查拳肠哗om 表A where 表B.Y=表A.Y) 提示是不能插入NULL值到表B.Y列 我想不出有什么错。。。。请高手解答 问题补充:上边是我打错了 终于明白了,谢谢各位高手
最佳答案
  • 五星知识达人网友:洎扰庸人
  • 2021-02-06 13:23
应该是这样的:
update 表B
set 表B.Y=(select Y from 表A where 表B.X=表A.X)
where exists(select 1 from 表A where 表B.X=表A.X);

原因:楼主的UPDATE语句中“where 表B.Y=表A.Y”有误,并且少了个外层的条件。按照楼主的语句,是把表B和表A中有相同X值的用表A中的Y值来更新。如果X值在表B中有,而在表A中没有,则把表B中的Y值更新为NULL,所以用A表来更新B表,要保证更新A表中存在的记录,而不是把整张B表全表更新了,LZ明白不?
全部回答
  • 1楼网友:怙棘
  • 2021-02-06 17:21
update 表B set 表B.Y=(select Y from 表A where 表B.x=表A.x)
  • 2楼网友:话散在刀尖上
  • 2021-02-06 17:08
UPDATe 表B SET 表B.Y = 表A.Y FROM 表B INNER JOIN 表A ON (表B.X = 表A.X)
  • 3楼网友:怙棘
  • 2021-02-06 15:44
不可理解,我也试了,真是这样。 应该是插入的时候把空格当做null处理了,但是查询的时候两者是不等同的。 没办法,只能 update 表B set 表B.Y= (select isnull(Y,'') from 表A where 表B.X=表A.X ) 了!
  • 4楼网友:一叶十三刺
  • 2021-02-06 14:09
直接在你的基础上改,如下: UPDATe 表B SET 表B.Y = (SELECT Y FROM 表A WHERe (表B.X = 表A.X)) WHERe EXISTS ( SELECt * FRO担偿曹锻丨蹬查拳肠哗M 表A WHERe (表B.X = 表A.X) ) 或者用两表连接的UPDATE来改写。 UPDATE 表B SET 表B.Y = 表A.Y FROM 表A INNER JOIN 表B ON (表B.X = 表A.X)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯