Обновление данных в одной таблице из другой на основе совпадения ID
У меня есть база данных с номерами счетов и номерами карт. Я сопоставляю их с файлом, чтобы обновить любые номера карт на номер счета, чтобы работать только с номерами счетов.
Я создал представление, связывающее таблицу с базой данных счетов/карт, чтобы вернуть ID таблицы и связанный номер счета. Теперь мне нужно обновить записи, где ID соответствует номеру счета.
Вот таблица Sales_Import
, поле AccountNumber
которой нужно обновить:
LeadID | AccountNumber |
---|---|
147 | 5807811235 |
150 | 5807811326 |
185 | 7006100100007267039 |
А вот таблица RetrieveAccountNumber
, из которой нужно обновить данные:
LeadID | AccountNumber |
---|---|
147 | 7006100100007266957 |
150 | 7006100100007267039 |
Я пробовал следующий запрос, но безуспешно:
UPDATE [Sales_Lead].[dbo].[Sales_Import]
SET [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber
FROM RetrieveAccountNumber
WHERE [Sales_Lead].[dbo].[Sales_Import].LeadID = RetrieveAccountNumber.LeadID)
Запрос обновляет номера карт на номера счетов, но номера счетов заменяются на NULL
.
Как я могу правильно обновить номера счетов в таблице Sales_Import
, используя данные из таблицы RetrieveAccountNumber
?
5 ответ(ов)
Я полагаю, что конструкция UPDATE...FROM
с JOIN
может быть полезной:
MS SQL
UPDATE
Sales_Import
SET
Sales_Import.AccountNumber = RAN.AccountNumber
FROM
Sales_Import SI
INNER JOIN
RetrieveAccountNumber RAN
ON
SI.LeadID = RAN.LeadID;
MySQL и MariaDB
UPDATE
Sales_Import SI,
RetrieveAccountNumber RAN
SET
SI.AccountNumber = RAN.AccountNumber
WHERE
SI.LeadID = RAN.LeadID;
Данная конструкция позволяет обновить данные в таблице Sales_Import
, основываясь на совпадении LeadID
с таблицей RetrieveAccountNumber
. Для MS SQL используется конструкция UPDATE ... FROM
, а для MySQL и MariaDB — синтаксис с одновременным указанием таблиц и условия через WHERE
.
Самый простой способ скопировать содержимое из одной таблицы в другую выглядит следующим образом:
UPDATE table2
SET table2.col1 = table1.col1,
table2.col2 = table1.col2,
...
FROM table1, table2
WHERE table1.memberid = table2.memberid
Вы также можете добавить условия, чтобы скопировать только определенные данные.
Ответ для будущих разработчиков:
Для выполнения обновления данных в одной таблице на основе данных из другой таблицы используются разные синтаксисы в SQL, в зависимости от системы управления базами данных (СУБД). Ниже приведены примеры для SQL Server, Oracle и MySQL.
SQL Server
В SQL Server можно использовать конструкцию UPDATE
с FROM
и INNER JOIN
:
UPDATE
t1
SET
t1.column = t2.column
FROM
Table1 t1
INNER JOIN Table2 t2
ON t1.id = t2.id;
Oracle (и SQL Server)
В Oracle и также в SQL Server можно использовать список таблиц в FROM
и условие WHERE
:
UPDATE
t1
SET
t1.column = t2.column
FROM
Table1 t1,
Table2 t2
WHERE
t1.ID = t2.ID;
MySQL
В MySQL конструкция немного отличается, но принцип остаётся тем же — производится обновление с использованием списков таблиц:
UPDATE
Table1 t1,
Table2 t2
SET
t1.column = t2.column
WHERE
t1.ID = t2.ID;
Надеюсь, данный ответ поможет вам лучше понять, как производить обновления данных в различных СУБД на основе значений из других таблиц.
Для PostgreSQL вы можете использовать следующий запрос для обновления таблицы Sales_Import
, устанавливая значение поля AccountNumber
из таблицы RetrieveAccountNumber
, основываясь на совпадении LeadID
:
UPDATE Sales_Import SI
SET AccountNumber = RAN.AccountNumber
FROM RetrieveAccountNumber RAN
WHERE RAN.LeadID = SI.LeadID;
В этом запросе мы обновляем столбец AccountNumber
в таблице Sales_Import
(или SI
в сокращенной форме), беря значения из столбца AccountNumber
таблицы RetrieveAccountNumber
(или RAN
в сокращенной форме). Связываем строки двух таблиц по столбцу LeadID
, чтобы обновление происходило корректно для соответствующих записей. Убедитесь, что имя столбца и таблиц соответствует вашей структуре базы данных.
Похоже, вы используете MSSQL. Если я правильно помню, это можно сделать следующим образом:
UPDATE [Sales_Lead].[dbo].[Sales_Import]
SET [AccountNumber] = RetrieveAccountNumber.AccountNumber
FROM RetrieveAccountNumber
WHERE [Sales_Lead].[dbo].[Sales_Import].LeadID = RetrieveAccountNumber.LeadID
Таким образом, вы обновите поле AccountNumber
в таблице [Sales_Lead].[dbo].[Sales_Import]
, используя значение из таблицы RetrieveAccountNumber
, основываясь на совпадении идентификаторов LeadID
.
Как выполнить UPDATE с использованием SELECT в SQL Server?
В чем разница между JOIN и INNER JOIN?
Как выполнить оператор UPDATE с JOIN в SQL Server?
Как конкатенировать текст из нескольких строк в одну строку в SQL Server
"Вставка результатов хранимой процедуры в временную таблицу"