SQL表更新

来源:百度知道 编辑:UC知道 时间:2024/06/16 14:33:17
表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 from 表A where 表B.Y=表A.Y)

提示是不能插入NULL值到表B.Y列

我想不出有什么错。。。。请高手解答
上边是我打错了

终于明白了,谢谢各位高手

应该是这样的:
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明白不?

不可理解,我也试了,真是这样。
应该是插入的时候把空格当做null处理了,但是查询的时候两者是不等同的。
没办法,只能
update 表B
set 表B.Y=
(select isnull(Y,'') from 表A where 表B.X=表A.X
)
了!

直接在你的基础上改,如下:
UPDATE 表B
SET 表B.Y = (SELECT Y FROM 表A WHERE (表B.X = 表A.X))
WHERE EXISTS (
SELECT *
FROM 表A
WHERE (表B.X = 表A.X)
)

或者用两表连接的UPDATE来改写。
UPDATE 表B
SET 表B.Y = 表A.Y
FROM 表A
INNER JOIN 表B
ON (表B.X = 表A.X)

UPDATE 表B
SET 表B.Y = 表A.Y
FROM 表B
INNER JOIN 表A
ON (表B.X = 表A.X)

update 表B
set 表B.Y=(select Y from 表A where 表B.x=表A.x)