12

Обновление данных в одной таблице из другой на основе совпадения ID

11

У меня есть база данных с номерами счетов и номерами карт. Я сопоставляю их с файлом, чтобы обновить любые номера карт на номер счета, чтобы работать только с номерами счетов.

Я создал представление, связывающее таблицу с базой данных счетов/карт, чтобы вернуть 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 ответ(ов)

17

Я полагаю, что конструкция 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.

3

Самый простой способ скопировать содержимое из одной таблицы в другую выглядит следующим образом:

UPDATE table2 
SET table2.col1 = table1.col1, 
    table2.col2 = table1.col2,
    ...
FROM table1, table2 
WHERE table1.memberid = table2.memberid

Вы также можете добавить условия, чтобы скопировать только определенные данные.

1

Ответ для будущих разработчиков:

Для выполнения обновления данных в одной таблице на основе данных из другой таблицы используются разные синтаксисы в 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;

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

0

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

0

Похоже, вы используете 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.

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