16

Как выполнить оператор UPDATE с JOIN в SQL Server?

17

Я пытаюсь обновить таблицу в SQL Server с данными из ее 'родительской' таблицы, см. ниже:

Таблица: sale

id (int)
udid (int)
assid (int)

Таблица: ud

id (int)
assid (int)

sale.assid содержит правильное значение для обновления ud.assid.

Какой запрос выполнит это обновление? Я предполагаю, что может подойти join, но не уверен, возможно ли это.

5 ответ(ов)

1

Ваш запрос на SQL Server может выглядеть следующим образом:

UPDATE ud 
SET assid = sale.assid
FROM sale
WHERE sale.udid = ud.id;

Проверьте, чтобы ud и sale были корректно определены в вашем контексте. Также убедитесь, что udid и id соответствуют полям в таблицах, которые вы хотите использовать для связывания записей.

1

Ваша 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 прописаны корректно.

Если вы хотите, чтобы обновление происходило только в тех строках, где значения из всех трех таблиц совпадают, текущая структура должна работать, но вам стоит проверить, что ваши условия действительно дают нужный результат.

0

Вот еще один пример, почему 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]
0

Стандартный подход в 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 может быть более читаемым и производительным в некоторых случаях.

0

Чтобы упростить запрос на обновление, использующий 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 являются демонстрационными названиями таблиц, названиями столбцов и идентификаторами. Замените их на актуальные имена, соответствующие вашей базе данных.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь