日期:2014-05-17  浏览次数:20509 次

sql 连表更新问题
各位牛牛好,我现在遇到个问题,需要请教大家。

就是我有两张表,表结构是一模一样的,因为另一张是备份表,只是其中的一些字段值不一样。

当初我把原表的某个字段为4的都改为了7,现在我需要把备份表中为4的,把原表也该为4,会有多行受影响。

update info set qq = (select qq from bakbak where qq = 4)


我现在这样写,报这样的错误:消息 512,级别 16,状态 1,第 2 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
语句已终止。


所以特来万能的csdn请教牛牛们。

------解决方案--------------------
update info set qq = (select qq from bakbak where qq = 4)
把=号改为in试一下
------解决方案--------------------
--(select qq from bakbak where qq = 4),这个查询的返回值不止一个,所以update info set qq=(1或2或3...),SQL SERVER不知道用哪个,就报错了
update info set qq = (select qq from bakbak where qq = 4)
--参考如下:
--首先你的原表和备份表要有唯一的关联字段。比如存在主键ID。
--先查询,看看结果是否正确,再更新:
--select
SELECT *
FROM dbo.info A
INNER JOIN dbo.bakbak B
ON a.ID = B.id
WHERE B.qq = 4
--update
UPDATE A
SET A.qq = B.qq
FROM dbo.info A
INNER JOIN dbo.bakbak B
ON a.ID = B.id
WHERE B.qq = 4

------解决方案--------------------
update info set qq =a.qq
from bakbak a inner join info on a.id=info.id