Как скопировать данные из нескольких строк одной таблицы в другую на сервере SQL?

У меня есть 2 таблицы со следующей структурой:

Таблица А:

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

Таблица Б:

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

Я хочу скопировать значения из col1 таблицы A в mycol таблицы B Это мой ожидаемый результат:

Ожидаемое:

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 ответа

Решение

Попробуй это:

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

Попробуй это

  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

Ваша ошибка в том, что вы используете очень старый стиль 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

Ваш измененный коррелированный подзапрос

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
Другие вопросы по тегам