Подтвердить что ты не робот

Обновление нескольких строк с помощью оператора select

У меня есть эти таблицы и значения:

Table1
------------------------
ID | Value
------------------------
2 | asdf
4 | fdsa
5 | aaaa


Table2
------------------------
ID | Value
------------------------
2 | bbbb
4 | bbbb
5 | bbbb

Я хочу обновить все значения в таблице2, используя значения в таблице1 с их соответствующими идентификаторами.

Есть ли способ сделать это с помощью простого SQL-запроса?

4b9b3361

Ответ 1

Запустите выбор, чтобы убедиться, что это то, что вы хотите

SELECT t1.value AS NEWVALUEFROMTABLE1,t2.value AS OLDVALUETABLE2,*
FROM Table2 t2
INNER JOIN Table1 t1 on t1.ID = t2.ID

Update

UPDATE Table2
SET Value = t1.Value
FROM Table2 t2
INNER JOIN Table1 t1 on t1.ID = t2.ID

Кроме того, рассмотрите возможность использования BEGIN TRAN, чтобы при необходимости отбросить его, но убедитесь, что вы COMMIT, когда вы удовлетворены.

Ответ 2

Если у вас есть идентификаторы в обеих таблицах, работает следующее:

update table2
    set value = (select value from table1 where table1.id = table2.id)

Возможно, лучший подход - это соединение:

update table2
    set value = table1.value
    from table1
    where table1.id = table2.id

Обратите внимание, что этот синтаксис работает в SQL Server, но может быть другим в других базах данных.

Ответ 3

Вы можете использовать псевдоним для улучшения запроса:

UPDATE t1
   SET t1.Value = t2.Value
  FROM table1 AS t1
         INNER JOIN 
       table2 AS t2
         ON t1.ID = t2.ID

Ответ 4

Я использовал это в MySQL, MS Access и SQL Server. Поля id - это поля, по которым таблицы совпадают, а не обязательно первичный индекс.

UPDATE DestTable INNER JOIN SourceTable ON DestTable.idField = SourceTable.idField SET DestTable.Field1 = SourceTable.Field1, DestTable.Field2 = SourceTable.Field2...

Ответ 5

SET SQL_SAFE_UPDATES = 0;
UPDATE m1,m2 
 SET m1.code = m2.code
WHERE
  m1.name = (select distinct m2.name from  m2 limit 1);

Здесь обновление происходит с palce в m1.code, где condtion выполняет поиск всех записей в подзапросе и возвращает все соответствующие строки. Я использую limit 1 для возврата одного вместо дубликатов. Вы можете использовать отдельный или лимит 1 или верхний 1 или иметь счетчик < 1 Sry, для моего английского