@pdatu

Как Написать запрос sql обновления таблицы данными с другой таблицы?

Здравствуйте.
Есть 2 таблицы uzer1 Поля ( id и name1 ) и uzer2 Поля ( id и name2 ) . Нужно обновить поле name1 таблицы uzer1 данными поля name2 с таблицы uzer2 так чтобы id таблиц были id = id
Как это можно написать?
  • Вопрос задан
  • 471 просмотр
Решения вопроса 1
igruschkafox
@igruschkafox
Специалист по сопровождению БД MS SQL
В таких случаях рекомендую делать так :)
Не самое кошерное решение - но зато понятно что происходит и минимум возможности для ошибки :)

--пример таблиц
CREATE TABLE uzer1 (id INT, name1 NVARCHAR(20))
CREATE TABLE uzer2 (id INT, name2 NVARCHAR(20))

-- Заполняем данными

-- Таблица [uzer1]
INSERT INTO [dbo].[uzer1]([id],[name1]) VALUES(1,'Вася')
INSERT INTO [dbo].[uzer1]([id],[name1]) VALUES(2,'Петя')
INSERT INTO [dbo].[uzer1]([id],[name1]) VALUES(3,'Гундяев')
-- Таблица [uzer2]
INSERT INTO [dbo].[uzer2]([id],[name2]) VALUES(1,'Вася')
INSERT INTO [dbo].[uzer2]([id],[name2]) VALUES(3,'Кирил')


--Шаг 1 
-- Пишем CTE с джойном двух таблиц - Для проверки что именно у нас на что заменится

;WITH cte_Update
as
(SELECT t1.Name1 AS 'Вот это'
, t2.Name2 AS 'апдейтим на это'
FROM [uzer1] t1
JOIN [uzer2] t2 ON t1.id=t2.id)

--Проверяем что у нас проапдетится именно то что нам надо
SELECT * FROM cte_Update

--Шаг 2 
-- пишем все тоже самое только вместо селекта Апдейт
;wITH cte_Update
as
(SELECT t1.Name1 AS 'Вот это'
, t2.Name2 AS 'апдейтим на это'
FROM [uzer1] t1
JOIN [uzer2] t2 ON t1.id=t2.id)

--Апдейтим
UPDATE  cte_Update
SET [Вот это] =[апдейтим на это] 

-- я использую такой способ, мне он кажется более безопасным и быстрым в написании :)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
el_peregrino
@el_peregrino
update uzer1 u1
set name1 = select name2 from uzer2 u2 where u1.id=u2.id
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Обновить имена только в уже существующих строках:
UPDATE `user1` AS `t1`
    JOIN `user2` AS `t2` ON `t2`.`id` = `t1`.`id`
    SET `t1`.`name1` = `t2`.`name2`;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы