Frage

I have 2 tables with the following structure:

Table A:

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

Table B:

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

I want to copy values from Table A's col1 into Table B's mycol This is my expected result:

Expected:

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

I tried several combinations of SQL UPDATE. This was the latest I tried - but it throws an error saying "Subquery returned more than 1 value."

Tried:

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)

Can someone throw some light on the correct direction to get a working query?

War es hilfreich?

Lösung

Try this:

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

Andere Tipps

Your error is that you are using very old style JOIN in the assignation (select) the correct syntax would be

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)

This syntax is valid, but usually an INNER JOIN is applied in these situations

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

Try This

  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

Your modified correlated subquery

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top