P
P
pdatu2015-11-18 20:59:42
MySQL
pdatu, 2015-11-18 20:59:42

How to write a sql query to update a table with data from another table?

Hello.
There are 2 tables uzer1 Fields ( id and name1 ) and uzer2 Fields ( id and name2 ) . You need to update the name1 field of the uzer1 table with the data of the name2 field from the uzer2 table so that the table ids are id = id
How can I write this?

Answer the question

In order to leave comments, you need to log in

3 answer(s)
I
igruschkafox, 2015-11-18
@pdatu

В таких случаях рекомендую делать так :)
Не самое кошерное решение - но зато понятно что происходит и минимум возможности для ошибки :)

--пример таблиц
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 [Вот это] =[апдейтим на это] 

-- я использую такой способ, мне он кажется более безопасным и быстрым в написании :)

E
Eugene, 2015-11-18
@el_peregrino

update uzer1 u1
set name1 = select name2 from uzer2 u2 where u1.id=u2.id

R
Rsa97, 2015-11-18
@Rsa97

Update names only in already existing rows:

UPDATE `user1` AS `t1`
    JOIN `user2` AS `t2` ON `t2`.`id` = `t1`.`id`
    SET `t1`.`name1` = `t2`.`name2`;

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question