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明白不?
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)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯