Как скопировать данные из нескольких строк одной таблицы в другую на сервере 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