【问题标题】:how to copy data from multiple rows of one table to another in sql server?如何在sql server中将数据从一个表的多行复制到另一个?
【发布时间】:2013-07-09 06:21:38
【问题描述】:

我有 2 个表,结构如下:

表 A:

id_A    col1
 1      val1
 2      val2
 3      val3
 ...    ....

表 B:

id_B  mycol   id_A_val
 1    smval1    null
 2     null      1
 3     null      2
...    ...       ...

我想将表 A 的 col1 中的值复制到表 B 的 mycol 这是我的预期结果:

预期:

id_B  mycol   id_A_val
 1    smval1    null
 2    val1      1
 3    val2      2
...    ...      ...

我尝试了几种 SQL UPDATE 组合。这是我尝试过的最新一次 - 但它会抛出一个错误,提示“子查询返回超过 1 个值。”

试过了:

UPDATE [dbo].[Table_B] 
SET MYCOL = (SELECT inst.[COL1] FROM [dbo].[TABLE_A] a,  [dbo].[TABLE_B] b
WHERE a.[ID_A] = b.[ID_A_VAL] AND b.ID_A_VAL IS NOT NULL)

有人可以指出正确的方向以获得有效的查询吗?

【问题讨论】:

  • 意味着您有 2 个值需要更新该列,在 set mycol = (不知道将什么值放入列中,无论是 val1 还是 val2)

标签: sql sql-server sql-update multiple-records


【解决方案1】:

试试这个:

update
    b
set
    mycol=table_a.col1
from table_b b
inner join table_a on
    b.id_A_val=table_a.id_A

【讨论】:

  • 谢谢。接受这个答案,因为这是我的第一个工作。
【解决方案2】:

您的错误是您在分配中使用了非常旧的样式JOIN(选择) 正确的语法是

UPDATE Table_B
SET MYCOL = (SELECT a.COL1 
             FROM TABLE_A a
             WHERE a.ID_A = Table_B.ID_A_VAL AND Table_B.ID_A_VAL IS NOT NULL)

此语法是有效的,但通常在这些情况下应用INNER JOIN

UPDATE table_b
SET  mycol = table_a.COL1
FROM table_b 
INNER JOIN table_a ON table_b.ID_A_VAL = table_a.id_A

【讨论】:

    【解决方案3】:

    试试这个

      UPDATE tableb
        SET mycol=a.col1
        FROM tableb  b
            INNER JOIN tablea a ON a.id_A=b.id_A_val    
        WHERE b.mycol is null
    

    【讨论】:

      【解决方案4】:

      您修改后的相关子查询

      UPDATE [dbo].[Table_B] 
      SET MYCOL = (
                   SELECT A.[COL1]
                   FROM [dbo].[TABLE_A] a
                   WHERE a.[ID_A] = [dbo].[Table_B].[ID_A_VAL]               
                   )
      WHERE [dbo].[Table_B].[ID_A_VAL] IS NOT NULL
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-21
        相关资源
        最近更新 更多