Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
У меня есть база данных с account numbers
и card numbers
. Я сопоставляю 9X_sql-server их с файлом для update
любых номеров карт с номером 9X_sql-update счета, так что я работаю только с номерами 9X_sql-join счетов.
Я создал представление, связывающее 9X_sql-join таблицу с базой данных учетной записи / карты, чтобы 9X_joins вернуть Table ID
и соответствующий номер учетной 9X_ms-sql-server записи, и теперь мне нужно обновить те записи, где 9X_database-update идентификатор совпадает с номером учетной 9X_sql-query записи.
Это таблица Sales_Import
, в которой необходимо 9X_sql-select обновить поле account number
:
LeadID AccountNumber
147 5807811235
150 5807811326
185 7006100100007267039
А это таблица RetrieveAccountNumber
, откуда мне 9X_sql-join нужно обновить:
LeadID AccountNumber
147 7006100100007266957
150 7006100100007267039
Я попробовал следующее, но 9X_database-update пока безуспешно:
UPDATE [Sales_Lead].[dbo].[Sales_Import]
SET [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber
FROM RetrieveAccountNumber
WHERE [Sales_Lead].[dbo].[Sales_Import]. LeadID =
RetrieveAccountNumber.LeadID)
Он обновляет номера карт 9X_sql-syntax до номеров счетов, но номера счетов заменяются 9X_jointable на NULL
Ответ #1
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Я считаю, что 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;
9X_jointable
- MS-Access использует другой оператор UPDATE с оператором JOIN. Взгляните на: http://www.sql-und-xml.de/sql-tuto ...
Ответ #2
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Простой способ скопировать содержимое из 9X_sql-query одной таблицы в другую:
UPDATE table2
SET table2.col1 = table1.col1,
table2.col2 = table1.col2,
...
FROM table1, table2
WHERE table1.memberid = table2.memberid
Вы также можете добавить 9X_ms-sql-server условие для копирования определенных данных.
- Это работает, но вам не нужна таблица 2 в FROM ОБНОВЛЕН ...
Ответ #3
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Для SQL Server 2008 + Использование MERGE
вместо 9X_sql-server проприетарного синтаксиса UPDATE ... FROM
имеет некоторую 9X_sql привлекательность.
Помимо того, что он является 9X_sql-server стандартным SQL и, следовательно, более 9X_sql переносимым, он также вызывает ошибку в 9X_sql-select случае наличия нескольких соединенных строк 9X_join на исходной стороне (и, следовательно, нескольких 9X_sql-update возможных различных значений для использования 9X_sql в обновлении), вместо того, чтобы иметь 9X_sql-syntax окончательный результат будет неопределенным.
MERGE INTO Sales_Import
USING RetrieveAccountNumber
ON Sales_Import.LeadID = RetrieveAccountNumber.LeadID
WHEN MATCHED THEN
UPDATE
SET AccountNumber = RetrieveAccountNumber.AccountNumber;
К 9X_sql-join сожалению, выбор того, что использовать, может 9X_sql-update не сводиться исключительно к предпочтительному 9X_ms-sql-server стилю. Реализация MERGE
в SQL Server страдает 9X_joins различными ошибками. Аарон Бертран составил 9X_ms-sql-server список the reported ones here.
- Аргументы в пользу использования MERGE (включая те, что в [сообщение с sqlblog.com] (http://sqlblog.com/blogs/hugo_kornelis/archive/2008/03/10/lets-deprecate-update-from.aspx), ссылка на которую приведена выш ...
Ответ #4
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Общий ответ для будущих разработчиков.
SQL Server
UPDATE
t1
SET
t1.column = t2.column
FROM
Table1 t1
INNER JOIN Table2 t2
ON t1.id = t2.id;
Oracle (и SQL Server)
UPDATE
t1
SET
t1.colmun = t2.column
FROM
Table1 t1,
Table2 t2
WHERE
t1.ID = t2.ID;
MySQL
UPDATE
Table1 t1,
Table2 t2
SET
t1.column = t2.column
WHERE
t1.ID = t2.ID;
9X_join
- Следует отметить, по крайней мере для SQL Server, используйте псевдоним, а не имя таблицы в верхнем предложении обнов ...
Ответ #5
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Для PostgreSQL:
UPDATE Sales_Import SI
SET AccountNumber = RAN.AccountNumber
FROM RetrieveAccountNumber RAN
WHERE RAN.LeadID = SI.LeadID;
9X_select
- Ошибка, которую я делаю: УСТАНОВИТЬ SI.AccountNumber = RAN.AccountNumber. Тем не мене ...
Ответ #6
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Кажется, вы используете MSSQL, значит, если 9X_sql-query я правильно помню, делается это так:
UPDATE [Sales_Lead].[dbo].[Sales_Import] SET [AccountNumber] =
RetrieveAccountNumber.AccountNumber
FROM RetrieveAccountNumber
WHERE [Sales_Lead].[dbo].[Sales_Import].LeadID = RetrieveAccountNumber.LeadID
Ответ #7
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
У меня была такая же проблема, когда для 9X_sql-query foo.new
было установлено значение null
для строк foo
, у 9X_select которых не было соответствующего ключа в 9X_sql-srever bar
. Я сделал что-то подобное в Oracle:
update foo set foo.new = (select bar.new from bar where foo.key = bar.key) where exists (select 1 from bar where foo.key = bar.key)
- Поскольку каждая строка в foo, не имеющая соответствия в bar, оказалась нулевой, потому что оператор select произвел null. Надеюсь, это было яснее, чем ...
Ответ #8
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Вот что у меня сработало в SQL Server:
UPDATE [AspNetUsers] SET
[AspNetUsers].[OrganizationId] = [UserProfile].[OrganizationId],
[AspNetUsers].[Name] = [UserProfile].[Name]
FROM [AspNetUsers], [UserProfile]
WHERE [AspNetUsers].[Id] = [UserProfile].[Id];
9X_sql-update
Ответ #9
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Для MySql это нормально:
UPDATE
Sales_Import SI,RetrieveAccountNumber RAN
SET
SI.AccountNumber = RAN.AccountNumber
WHERE
SI.LeadID = RAN.LeadID
9X_jointable
Ответ #10
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Спасибо за ответы. Я нашел решение.
UPDATE Sales_Import
SET AccountNumber = (SELECT RetrieveAccountNumber.AccountNumber
FROM RetrieveAccountNumber
WHERE Sales_Import.leadid =RetrieveAccountNumber.LeadID)
WHERE Sales_Import.leadid = (SELECT RetrieveAccountNumber.LeadID
FROM RetrieveAccountNumber
WHERE Sales_Import.leadid = RetrieveAccountNumber.LeadID)
9X_mssql
- единственное решение, которое работает для меня, потому что это стандартный оператор обновления SQL (UPDA ...
Ответ #11
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Если таблицы находятся в разных базах данных. (MSSQL)
update database1..Ciudad
set CiudadDistrito=c2.CiudadDistrito
FROM database1..Ciudad c1
inner join
database2..Ciudad c2 on c2.CiudadID=c1.CiudadID
9X_sql-join
Ответ #12
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Используйте следующий блок запроса для обновления 9X_select Table1 таблицей Table2 на основе идентификатора:
UPDATE Sales_Import, RetrieveAccountNumber
SET Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber
where Sales_Import.LeadID = RetrieveAccountNumber.LeadID;
Это 9X_sql-update самый простой способ решить эту проблему.
Ответ #13
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
MS SQL
UPDATE c4 SET Price=cp.Price*p.FactorRate FROM TableNamea_A c4
inner join TableNamea_B p on c4.Calcid=p.calcid
inner join TableNamea_A cp on c4.Calcid=cp.calcid
WHERE c4..Name='MyName';
Oracle 11g
MERGE INTO TableNamea_A u
using
(
SELECT c4.TableName_A_ID,(cp.Price*p.FactorRate) as CalcTot
FROM TableNamea_A c4
inner join TableNamea_B p on c4.Calcid=p.calcid
inner join TableNamea_A cp on c4.Calcid=cp.calcid
WHERE p.Name='MyName'
) rt
on (u.TableNamea_A_ID=rt.TableNamea_B_ID)
WHEN MATCHED THEN
Update set Price=CalcTot ;
9X_mssql
Ответ #14
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
обновление из одной таблицы в другую по 9X_sql-update совпадению идентификатора
UPDATE
TABLE1 t1,
TABLE2 t2
SET
t1.column_name = t2.column_name
WHERE
t1.id = t2.id;
- В SQL Server v18, похоже, нельзя использовать вторую таблицу в UPDATE. Он жалуется на запятую и хо ...
Ответ #15
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Приведенный ниже SQL, предложенный кем-то, НЕ 9X_database-update работает в SQL Server. Этот синтаксис напоминает 9X_database-update мне мой старый школьный класс:
UPDATE table2
SET table2.col1 = table1.col1,
table2.col2 = table1.col2,
...
FROM table1, table2
WHERE table1.memberid = table2.memberid
Все остальные 9X_sql-update запросы с использованием NOT IN
или NOT EXISTS
не рекомендуются. Появляются 9X_sql-query NULL, потому что OP сравнивает весь набор 9X_join данных с меньшим подмножеством, тогда, конечно, возникнет 9X_jointable проблема сопоставления. Это должно быть 9X_join исправлено путем написания правильного SQL 9X_sql с правильным JOIN
вместо проблемы уклонения 9X_sql-query с помощью NOT IN
. В этом случае вы можете столкнуться 9X_select-query с другими проблемами, используя NOT IN
или NOT EXISTS
.
Я 9X_sql-server голосую за лучший, который является обычным 9X_sql-query способом обновления таблицы на основе другой 9X_mssql таблицы путем присоединения к SQL Server. Как 9X_database-update я уже сказал, вы не можете использовать 9X_sql-query две таблицы в одном и том же операторе UPDATE
в 9X_joins SQL Server, если сначала не присоединитесь 9X_sql-join к ним.
- Могу только сказать, что в SQL Server 2017 это работает отлично. Про ...
Ответ #16
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Это самый простой и лучший вариант для Mysql 9X_sql-select и Maria DB
UPDATE table2, table1 SET table2.by_department = table1.department WHERE table1.id = table2.by_id
Примечание. Если вы столкнулись 9X_database-update со следующей ошибкой, связанной с вашей 9X_sql-select версией Mysql / Maria DB: «Код ошибки: 1175. Вы 9X_sql-server используете безопасный режим обновления 9X_sql-join и пытались обновить таблицу без WHERE, в 9X_joins которой используется столбец KEY. Чтобы 9X_sql-update отключить безопасный режим. , переключите 9X_sql этот параметр в настройках "
Затем запустите 9X_select такой код
SET SQL_SAFE_UPDATES=0;
UPDATE table2, table1 SET table2.by_department = table1.department WHERE table1.id = table2.by_id
Ответ #17
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
обновление в той же таблице:
DECLARE @TB1 TABLE
(
No Int
,Name NVarchar(50)
,linkNo int
)
DECLARE @TB2 TABLE
(
No Int
,Name NVarchar(50)
,linkNo int
)
INSERT INTO @TB1 VALUES(1,'changed person data', 0);
INSERT INTO @TB1 VALUES(2,'old linked data of person', 1);
INSERT INTO @TB2 SELECT * FROM @TB1 WHERE linkNo = 0
SELECT * FROM @TB1
SELECT * FROM @TB2
UPDATE @TB1
SET Name = T2.Name
FROM @TB1 T1
INNER JOIN @TB2 T2 ON T2.No = T1.linkNo
SELECT * FROM @TB1
9X_mssql
Ответ #18
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
работает с postgresql
UPDATE application
SET omts_received_date = (
SELECT
date_created
FROM
application_history
WHERE
application.id = application_history.application_id
AND application_history.application_status_id = 8
);
9X_sql-syntax
Ответ #19
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Я подумал, что это простой пример, может 9X_joins кому-то будет проще,
DECLARE @TB1 TABLE
(
No Int
,Name NVarchar(50)
)
DECLARE @TB2 TABLE
(
No Int
,Name NVarchar(50)
)
INSERT INTO @TB1 VALUES(1,'asdf');
INSERT INTO @TB1 VALUES(2,'awerq');
INSERT INTO @TB2 VALUES(1,';oiup');
INSERT INTO @TB2 VALUES(2,'lkjhj');
SELECT * FROM @TB1
UPDATE @TB1 SET Name =S.Name
FROM @TB1 T
INNER JOIN @TB2 S
ON S.No = T.No
SELECT * FROM @TB1
Ответ #20
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Это позволит вам обновить таблицу на основе 9X_select значения столбца, не найденного в другой 9X_sql-select таблице.
UPDATE table1 SET table1.column = 'some_new_val' WHERE table1.id IN (
SELECT *
FROM (
SELECT table1.id
FROM table1
LEFT JOIN table2 ON ( table2.column = table1.column )
WHERE table1.column = 'some_expected_val'
AND table12.column IS NULL
) AS Xalias
)
Это обновит таблицу на основе значения 9X_join столбца, найденного в обеих таблицах.
UPDATE table1 SET table1.column = 'some_new_val' WHERE table1.id IN (
SELECT *
FROM (
SELECT table1.id
FROM table1
JOIN table2 ON ( table2.column = table1.column )
WHERE table1.column = 'some_expected_val'
) AS Xalias
)
Ответ #21
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
попробуйте это:
UPDATE
Table_A
SET
Table_A.AccountNumber = Table_B.AccountNumber ,
FROM
dbo.Sales_Import AS Table_A
INNER JOIN dbo.RetrieveAccountNumber AS Table_B
ON Table_A.LeadID = Table_B.LeadID
WHERE
Table_A.LeadID = Table_B.LeadID
9X_sql-syntax
Ответ #22
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
MYSQL (это мой предпочтительный способ восстановления 9X_sql-update значений всех определенных столбцов reasonId
на основе 9X_sql эквивалентности первичного ключа id
)
UPDATE `site` AS destination
INNER JOIN `site_copy` AS backupOnTuesday
ON backupOnTuesday.`id` = destination.`id`
SET destdestination.`reasonId` = backupOnTuesday.`reasonId`
Ответ #23
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Oracle 11g
merge into Sales_Import
using RetrieveAccountNumber
on (Sales_Import.LeadId = RetrieveAccountNumber.LeadId)
when matched then update set Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber;
9X_sql-update
Ответ #24
Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора
Для Oracle SQL попробуйте использовать псевдоним
UPDATE Sales_Lead.dbo.Sales_Import SI
SET SI.AccountNumber = (SELECT RAN.AccountNumber FROM RetrieveAccountNumber RAN WHERE RAN.LeadID = SI.LeadID);
9X_sql-update
-
2
-
11
-
4
-
2
-
1
-
2
-
1
-
1
-
2
-
1
-
10
-
3
-
7
-
3
-
2
-
9
-
6
-
12
-
3
-
3
-
6
-
2
-
2
-
5
-
2
-
3
-
4
-
4
-
3
-
3
-
3
-
12
-
2
-
2
-
4
-
11
-
2
-
7
-
6
-
4
-
16
-
2
-
4
-
2
-
4
-
5
-
2
-
4
-
2
-
3