У меня есть база данных с account numbers
и card numbers
. Я сопоставляю их в файле с update
любыми номерами карт и номерами счетов, так что я работаю только с номерами счетов.
Я создал представление, связывающее таблицу с базой данных учетных записей / карточек, чтобы получить соответствующий Table ID
и соответствующий номер учетной записи, и теперь мне нужно обновить те записи, в которых идентификатор совпадает с номером учетной записи.
Это Sales_Import
таблица, где account number
поле необходимо обновить:
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
sql
sql-server
select
join
sql-update
DineshDB
источник
источник
SI.AccountNumber
на просто,AccountNumber
иначе он потерпит неудачу.UPDATE Sales_Import, RetrieveAccountNumber SET Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber where Sales_Import.LeadID = RetrieveAccountNumber.LeadID;
. Немного не по теме, но может быть полезноПростой способ скопировать содержимое из одной таблицы в другую заключается в следующем:
Вы также можете добавить условие, чтобы скопировать определенные данные.
источник
Для SQL Server 2008 + использование,
MERGE
а не собственныйUPDATE ... FROM
синтаксис имеет некоторую привлекательность.Помимо того, что он является стандартным SQL и, следовательно, более переносимым, он также вызовет ошибку в случае наличия нескольких соединенных строк на стороне источника (и, следовательно, нескольких возможных различных значений, которые будут использоваться в обновлении), вместо того, чтобы конечный результат был недетерминированным ,
К сожалению, выбор, который использовать, может не сводиться исключительно к предпочтительному стилю. Реализация
MERGE
в SQL Server была связана с различными ошибками. Аарон Бертран составил список зарегистрированных здесь .источник
MERGE
.Общий ответ для будущих разработчиков.
SQL Server
Oracle (и SQL Server)
MySQL
источник
update t1...
а неupdate Table1...
)Для PostgreSQL:
источник
Кажется, вы используете MSSQL, тогда, если я правильно помню, это делается так:
источник
У меня была такая же проблема с
foo.new
настройкойnull
для строк, вfoo
которых не было соответствующего ключаbar
. Я сделал что-то подобное в Oracle:источник
Для MySql, который работает нормально:
источник
Вот что сработало для меня в SQL Server:
источник
Спасибо за ответы. Я нашел решение, хотя.
источник
В случае, если таблицы находятся в разных базах данных. (MSSQL)
источник
Используйте следующий блок запроса для обновления таблицы Table1 на основе идентификатора:
Это самый простой способ решения этой проблемы.
источник
MS Sql
Oracle 11g
источник
обновить в той же таблице:
источник
Ниже SQL кто-то предложил, не работает в SQL Server. Этот синтаксис напоминает мне мой класс старой школы:
Все остальные запросы используются
NOT IN
илиNOT EXISTS
не рекомендуются. Отображаются NULL, потому что OP сравнивает весь набор данных с меньшим подмножеством, тогда, конечно, будет проблема с сопоставлением. Это должно быть исправлено путем написания правильного SQL с правильным,JOIN
а не уклонением от проблемы с помощьюNOT IN
. Вы можете столкнуться с другими проблемами, используяNOT IN
илиNOT EXISTS
в этом случае.Мой голос за верхний, который является обычным способом обновления таблицы на основе другой таблицы путем присоединения к SQL Server. Как я уже сказал, вы не можете использовать две таблицы в одном и
UPDATE
том же операторе в SQL Server, если сначала не присоединитесь к ним.источник
это работает с postgresql
источник
Я подумал, что это простой пример, может кому-то будет легче,
источник
Oracle 11g
источник
Это позволит вам обновить таблицу на основе значения столбца, не найденного в другой таблице.
Это обновит таблицу на основе значения столбца, найденного в обеих таблицах.
источник
попробуй это :
источник
Я хотел бы добавить еще одну вещь.
Не обновляйте значение с тем же значением, оно создает дополнительные журналы и ненужные накладные расходы. См. Пример ниже - обновление будет выполняться только для 2 записей, несмотря на связь с 3.
источник
Если приведенные выше ответы не работают, попробуйте это
источник