Как выполнить оператор UPDATE с JOIN в SQL Server?
Я пытаюсь обновить таблицу в SQL Server с данными из ее 'родительской' таблицы, см. ниже:
Таблица: sale
id (int)
udid (int)
assid (int)
Таблица: ud
id (int)
assid (int)
sale.assid
содержит правильное значение для обновления ud.assid
.
Какой запрос выполнит это обновление? Я предполагаю, что может подойти join
, но не уверен, возможно ли это.
5 ответ(ов)
Ваш запрос на SQL Server может выглядеть следующим образом:
UPDATE ud
SET assid = sale.assid
FROM sale
WHERE sale.udid = ud.id;
Проверьте, чтобы ud
и sale
были корректно определены в вашем контексте. Также убедитесь, что udid
и id
соответствуют полям в таблицах, которые вы хотите использовать для связывания записей.
Ваша SQL-запрос выглядит корректно, однако я заметил некоторые потенциальные проблемы в структуре самого запроса. Если вы хотите выполнить обновление в одной таблице, основываясь на значениях из других таблиц, возможно, стоит использовать более явный JOIN
, чтобы улучшить читаемость и предотвратить потенциальные ошибки.
Вот улучшенный вариант вашего запроса с использованием JOIN
:
UPDATE table1
SET COLUMN = value
FROM table2
JOIN table3 ON table1.column_id = table3.id
WHERE table1.column_id = table2.id
AND table1.COLUMN = value
AND table2.COLUMN = value
AND table3.COLUMN = value;
Обратите внимание на то, что JOIN
используется для соединения table2
и table3
по условию с table1
. Это позволяет сделать логику запроса более понятной. Также убедитесь, что все условия в WHERE
прописаны корректно.
Если вы хотите, чтобы обновление происходило только в тех строках, где значения из всех трех таблиц совпадают, текущая структура должна работать, но вам стоит проверить, что ваши условия действительно дают нужный результат.
Вот еще один пример, почему SQL не является по-настоящему переносимым.
Для MySQL запрос будет выглядеть так:
UPDATE ud, sale
SET ud.assid = sale.assid
WHERE sale.udid = ud.id;
Для получения дополнительной информации ознакомьтесь с разделом о обновлении нескольких таблиц: Документация MySQL
Формат запроса для обновления выглядит следующим образом:
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
Стандартный подход в SQL для обновления значений может выглядеть так:
UPDATE ud
SET assid = (SELECT assid FROM sale s WHERE ud.id = s.id)
Однако, если вы используете SQL Server, вы можете воспользоваться конструкцией с JOIN, что может быть более эффективным:
UPDATE u
SET assid = s.assid
FROM ud u
JOIN sale s ON u.id = s.id
Оба способа обновляют поле assid
в таблице ud
, используя данные из таблицы sale
, но второй вариант с JOIN может быть более читаемым и производительным в некоторых случаях.
Чтобы упростить запрос на обновление, использующий JOIN нескольких таблиц, вы можете воспользоваться следующим шаблоном:
UPDATE
first_table ft
JOIN second_table st ON st.some_id = ft.some_id
JOIN third_table tt ON tt.some_id = st.some_id
SET
ft.some_column = some_value
WHERE
ft.some_column = 123456 AND st.some_column = 123456;
Примечание: В данном примере first_table
, second_table
, third_table
и some_column
, а также значение 123456
являются демонстрационными названиями таблиц, названиями столбцов и идентификаторами. Замените их на актуальные имена, соответствующие вашей базе данных.
Как выполнить UPDATE с использованием SELECT в SQL Server?
"Вставка результатов хранимой процедуры в временную таблицу"
Как экранировать одинарную кавычку в SQL Server?
Обновление данных в одной таблице из другой на основе совпадения ID
Следует ли мне использовать != или <> для обозначения "не равно" в T-SQL?