Mam bazę danych z account numbers
i card numbers
. Dopasowuję je do pliku do update
dowolnych numerów kart do numeru konta, dzięki czemu pracuję tylko z numerami kont.
Utworzyłem widok łączący tabelę z bazą danych kont / kart, aby zwrócić Table ID
i powiązany numer konta, a teraz muszę zaktualizować te rekordy, w których identyfikator jest zgodny z numerem konta.
To jest Sales_Import
tabela, w której account number
pole wymaga aktualizacji:
LeadID AccountNumber
147 5807811235
150 5807811326
185 7006100100007267039
A to jest RetrieveAccountNumber
tabela, z której muszę zaktualizować:
LeadID AccountNumber
147 7006100100007266957
150 7006100100007267039
Próbowałem poniżej, ale jak dotąd nie miałem szczęścia:
UPDATE [Sales_Lead].[dbo].[Sales_Import]
SET [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber
FROM RetrieveAccountNumber
WHERE [Sales_Lead].[dbo].[Sales_Import]. LeadID =
RetrieveAccountNumber.LeadID)
Aktualizuje numery kart do numerów kont, ale numery kont zostają zastąpione przez NULL
sql
sql-server
select
join
sql-update
DineshDB
źródło
źródło
SI.AccountNumber
na po prostuAccountNumber
inaczej, to się nie powiedzie.UPDATE Sales_Import, RetrieveAccountNumber SET Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber where Sales_Import.LeadID = RetrieveAccountNumber.LeadID;
. Nieco tematyczny, ale może być pomocnyProsty sposób kopiowania zawartości z jednej tabeli do drugiej jest następujący:
Możesz także dodać warunek, aby skopiować określone dane.
źródło
W przypadku SQL Server 2008 + używanie
MERGE
raczej niż zastrzeżonaUPDATE ... FROM
składnia ma pewien urok.Oprócz tego, że jest to standardowy SQL, a zatem bardziej przenośny, spowoduje także błąd w przypadku wielu połączonych wierszy po stronie źródłowej (a tym samym wielu możliwych różnych wartości do zastosowania w aktualizacji), a nie końcowy wynik będzie nieokreślony .
Niestety wybór, którego użyć, może nie sprowadzać się wyłącznie do preferowanego stylu. Implementacja
MERGE
w SQL Server została dotknięta różnymi błędami. Aaron Bertrand opracował tutaj listę zgłoszonych .źródło
MERGE
.Ogólna odpowiedź dla przyszłych programistów.
SQL Server
Oracle (i SQL Server)
MySQL
źródło
update t1...
zamiastupdate Table1...
)W przypadku PostgreSQL:
źródło
Wygląda na to, że używasz MSSQL, a jeśli dobrze pamiętam, robi się to tak:
źródło
Miałem ten sam problem z
foo.new
ustawieniemnull
dla wierszy, wfoo
których nie było pasującego kluczabar
. Zrobiłem coś takiego w Oracle:źródło
W przypadku MySql, który działa dobrze:
źródło
Oto, co działało dla mnie w SQL Server:
źródło
Dziękuję za odpowiedzi. Znalazłem rozwiązanie.
źródło
W przypadku, gdy tabele znajdują się w różnych bazach danych. (MSSQL)
źródło
Użyj następującego bloku zapytania, aby zaktualizować tabelę 1 z tabelą 2 na podstawie identyfikatora:
To najprostszy sposób na rozwiązanie tego problemu.
źródło
MS Sql
Oracle 11g
źródło
aktualizacja w tej samej tabeli:
źródło
Poniższy SQL sugerowany przez kogoś NIE działa w SQL Server. Ta składnia przypomina mi klasę ze starej szkoły:
Wszystkie inne zapytania używające
NOT IN
lubNOT EXISTS
niezalecane. Pojawiają się wartości NULL, ponieważ OP porównuje cały zestaw danych z mniejszym podzbiorem, wtedy oczywiście wystąpi problem z dopasowaniem. Należy to naprawić, pisząc odpowiedni SQL z poprawnymJOIN
zamiast unikając problemu przy użyciuNOT IN
. Możesz napotkać inne problemy, używającNOT IN
lubNOT EXISTS
w tym przypadku.Głosuję na najwyższy, który jest konwencjonalnym sposobem aktualizacji tabeli opartej na innej tabeli, dołączając do programu SQL Server. Jak powiedziałem, nie możesz używać dwóch tabel w tej samej
UPDATE
instrukcji w SQL Server, chyba że dołączysz do nich w pierwszej kolejności.źródło
działa z postgresql
źródło
Myślałem, że to prosty przykład, że ktoś może to ułatwić,
źródło
Oracle 11g
źródło
Umożliwi to aktualizację tabeli na podstawie wartości kolumny, której nie znaleziono w innej tabeli.
Spowoduje to zaktualizowanie tabeli na podstawie wartości kolumny znalezionej w obu tabelach.
źródło
Spróbuj tego :
źródło
Chciałbym dodać jeszcze jedną rzecz.
Nie aktualizuj wartości o tej samej wartości, generuje to dodatkowe rejestrowanie i niepotrzebne koszty ogólne. Zobacz przykład poniżej - przeprowadzi aktualizację tylko na 2 rekordach, pomimo łączenia na 3.
źródło
Jeśli powyższe odpowiedzi nie działają, spróbuj tego
źródło