1

我有 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)

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

4

4 回答 4

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
于 2013-07-09T06:34:18.190 回答
1

尝试这个

  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
于 2013-07-09T06:35:46.127 回答
1

您的错误是您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
于 2013-07-09T06:46:34.717 回答
0

您修改后的相关子查询

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
于 2013-07-09T07:05:21.863 回答