Дополнительно
Как выполнить UPDATE из SELECT в SQL Server?
В SQL Server можно вставлять
в таблицу с помощью оператора SELECT
:
INSERT INTO Table (col1, col2, col3)
SELECT col1, col2, col3
FROM other_table
WHERE sql = 'cool'
Возможно ли также обновление с помощью SELECT
? У меня есть временная таблица, содержащая значения, и я хотел бы обновить другую таблицу, используя эти значения. Возможно, что-то вроде этого:
UPDATE Table SET col1, col2
SELECT col1, col2
FROM other_table
WHERE sql = 'cool'
WHERE Table.id = other_table.id
3522
33
.
В SQL Server 2008 (или лучше) используйте
MERGE
Альтернативный вариант:
.
Я бы изменил отличный ответ Робина на следующий:
Без предложения WHERE вы затронете даже те строки, которые не должны быть затронуты, что может (возможно) вызвать пересчет индекса или срабатывание триггеров, которые на самом деле не должны были срабатывать.
Одним из способов
Другой возможности пока не упомянул-это просто Чак сам оператор SELECT в КТР, а затем обновить КТР.
Это имеет то преимущество, что легко выполнить "выбрать пункт" заявление на своей первой вменяемость проверить результаты, но это требует, чтобы вы псевдонимов столбцов, как указано выше, если они называются так же, в исходной и целевой таблицах.
Это также имеет те же ограничения, как обновить проприетарные
... от
синтаксис показано в другие ответы. Если в исходной таблице на стороне "Многие" один-ко-многим присоединиться, то это undeterministic, какие из возможных сопоставления присоединился записи будут использованы вобновление
(вопрос, что "слияние" избегает вызывает ошибку при попытке обновить одну и ту же строку более одного раза).Для записи (и другим поиск как я), вы можете сделать это в MySQL вроде этого:
Используя псевдоним:
Простой способ сделать это:
Это может быть ниша причин выполнить обновление (например, в основном используется в порядок), или могут быть очевидны для других, но это также должно быть указано, что вы можете выполнить обновление-инструкция Select без использования Join (в случае таблиц вы'вновь обновление между ними нет общего поля).
А вот еще один полезный синтаксис:
Он проверяет, если он имеет значение null или не используя ", где существуют и".
Я добавить это только так вы можете увидеть быстрый способ, чтобы написать это, так что вы можете проверить, что будет обновляться, прежде чем делать обновление.
Если вы используете в MySQL вместо SQL-сервером синтаксис:
Обновление от Выберите с внутренней Join в SQL базы данных
Поскольку есть слишком много ответов на этот пост, которые наиболее сильно вверх-проголосовали, я думал, я хотел бы представить мои предложения здесь слишком. Хотя вопрос очень интересный, я видел на многих сайтах форума и принял решение, используя внутреннее соединение со скриншотами.
Сначала я создал таблицу с именем с schoolold и вставить несколько записей в отношении их имена столбцов и выполнить его.
Затем я выполнил выберите команда для просмотра вставленных записей.
Затем я создал новую таблицу с именем с schoolnew и аналогично выполненные выше действия.
Затем, чтобы посмотреть, вставленных записей в ней, я выполнить команду select.
Сейчас, здесь я хочу внести некоторые изменения в третьей и четвертой строке, чтобы выполнить это действие, я выполнить обновление ** команды внутреннее соединение**.
Чтобы просмотреть изменения, которые я выполнить выберите команда.
Вы можете увидеть, как третья и четвертая записи таблицы schoolold легко заменяются таблицы schoolnew с помощью внутреннего соединения с инструкцией Update.
В следующем примере используется производная таблица, инструкция Select после предложения from, чтобы вернуть старое и новое значения для дальнейших обновлений:
И если вы захотели присоединиться к столу с самим собой (который выиграл'т случится слишком часто):
Обновление через
КТР
является более читаемым, чем другие ответы здесь:Если вы используете SQL Server, вы можете обновить одну таблицу из другой без указания присоединиться и просто связать на двух из
Где
положение. Это делает гораздо проще SQL-запрос:Другой способ заключается в использовании производной таблицы:
Образец данных
Чтобы убедиться, что вы обновляете то, что вы хотите, выберите первый