SQL复制将列粘贴到另一个表:"子查询返回的值超过1个。"

时间:2016-08-26 06:39:44

标签: sql-server sql-update set

我只想将表A中的列复制并粘贴到表B中。

我检查了两个表有相同的行数

ALTER TABLE [dbo].[cube]
ADD [peer_group] int

--check row count same
SELECT COUNT(*)
    FROM [dbo].[cube]
--13103507

SELECT TOP 10
        peer_group
    FROM [dbo].[cube]
--NULL
--NULL
--NULL
--NULL
--NULL
--NULL
--NULL
--NULL
--NULL
--NULL

SELECT COUNT(group_5)
    FROM [dbo].[v_group]
--13103507

SELECT TOP 10
        group_5
    FROM [dbo].[v_group]
--1
--1
--2
--2
--3
--3
--4
--4
--4
--4

我使用SET

UPDATE [dbo].[cube]
SET [peer_group] = 
                (SELECT [group_5]
                FROM [dbo].[v_group]
                )

但它会引发错误:

  

子查询返回的值超过1。这是不允许的   子查询跟随=,!=,<,< =,>,> =或当子查询用作   表达。

任何人都知道如何解决这个问题吗?谢谢!

对不起,我可以在这里方便地发布我的数据。如果需要,请告诉我,我会模拟一些数据。

更新: 基于答案/评论(谢谢!)我理解发生错误,因为SQL认为我想将SELECT子查询中检索到的许多值放入空新列[peer_group]的每一行。

似乎SET [column_1] = [column_2]只有当两个列位于同一个表中或联接表中时才有效(请参阅@Praveen'解决方案)。

考虑到我的具体情况,[dbo].[v_group]是从[dbo].[cube]生成的视图。我只是使用

SELECT  *
        ,_something_ AS [peer_group] --this is what I had in [dbo].[v_group]
    INTO [dbo].[new]
    FROM [dbo].[cube]

1 个答案:

答案 0 :(得分:2)

你可以试试;

Update a
set a.[peer_group] = b.[group_5]
from [dbo].[cube] a
join [dbo].[v_group] b on a.id = b.id;

错误是由于子查询返回多个更新值 您需要将这两个表连接起来进行更新。