Ich habe eine Datenbank mit account numbers
und card numbers
. Ich ordne diese einer Datei mit update
beliebigen Kartennummern der Kontonummer zu, so dass ich nur mit Kontonummern arbeite.
Ich habe eine Ansicht erstellt, die die Tabelle mit der Konto- / Kartendatenbank verknüpft, um die Table ID
und die zugehörige Kontonummer zurückzugeben. Jetzt muss ich die Datensätze aktualisieren, bei denen die ID mit der Kontonummer übereinstimmt.
Dies ist die Sales_Import
Tabelle, in der das account number
Feld aktualisiert werden muss:
LeadID AccountNumber
147 5807811235
150 5807811326
185 7006100100007267039
Und dies ist die RetrieveAccountNumber
Tabelle, von der aus ich aktualisieren muss:
LeadID AccountNumber
147 7006100100007266957
150 7006100100007267039
Ich habe das Folgende versucht, aber bisher kein Glück:
UPDATE [Sales_Lead].[dbo].[Sales_Import]
SET [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber
FROM RetrieveAccountNumber
WHERE [Sales_Lead].[dbo].[Sales_Import]. LeadID =
RetrieveAccountNumber.LeadID)
Die Kartennummern werden auf Kontonummern aktualisiert, die Kontonummern werden jedoch durch ersetzt NULL
quelle
SI.AccountNumber
,AccountNumber
sonst schlägt es fehl.UPDATE Sales_Import, RetrieveAccountNumber SET Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber where Sales_Import.LeadID = RetrieveAccountNumber.LeadID;
. Etwas abseits des Themas, kann aber hilfreich seinDer einfache Weg, den Inhalt von einer Tabelle in eine andere zu kopieren, ist wie folgt:
Sie können auch die Bedingung hinzufügen, um die bestimmten Daten zu kopieren.
quelle
Für SQL Server 2008 + hat die Verwendung
MERGE
anstelle der proprietärenUPDATE ... FROM
Syntax einen gewissen Reiz.Es ist nicht nur Standard-SQL und damit portabler, sondern führt auch zu einem Fehler, wenn auf der Quellseite mehrere verknüpfte Zeilen vorhanden sind (und somit mehrere mögliche unterschiedliche Werte für das Update verwendet werden müssen), anstatt dass das Endergebnis unbestimmt ist .
Leider hängt die Wahl der Verwendung möglicherweise nicht nur vom bevorzugten Stil ab. Die Implementierung von
MERGE
in SQL Server war mit verschiedenen Fehlern behaftet. Aaron Bertrand hat hier eine Liste der gemeldeten zusammengestellt .quelle
MERGE
.Allgemeine Antwort für zukünftige Entwickler.
SQL Server
Oracle (und SQL Server)
MySQL
quelle
update t1...
anstelle vonupdate Table1...
) verwendet wirdFür PostgreSQL:
quelle
Anscheinend verwenden Sie MSSQL. Wenn ich mich richtig erinnere, geschieht dies folgendermaßen:
quelle
Ich hatte das gleiche Problem mit
foo.new
der Einstellungnull
für Zeilen, fürfoo
die kein passender Schlüssel vorhanden warbar
. Ich habe so etwas in Oracle gemacht:quelle
Für MySql funktioniert das gut:
quelle
Folgendes hat bei mir in SQL Server funktioniert:
quelle
Danke für die Antworten. Ich habe eine Lösung gefunden.
quelle
Falls sich die Tabellen in einer anderen Datenbank befinden. (MSSQL)
quelle
Verwenden Sie den folgenden Abfrageblock, um Tabelle1 mit Tabelle2 basierend auf der ID zu aktualisieren:
Dies ist der einfachste Weg , um dieses Problem anzugehen.
quelle
MS Sql
Oracle 11g
quelle
Update in derselben Tabelle:
quelle
Das unten von jemandem vorgeschlagene SQL funktioniert NICHT in SQL Server. Diese Syntax erinnert mich an meine alte Schulklasse:
Alle anderen Abfragen mit
NOT IN
oderNOT EXISTS
werden nicht empfohlen. NULL-Werte werden angezeigt, da OP den gesamten Datensatz mit einer kleineren Teilmenge vergleicht. Dann tritt natürlich ein Übereinstimmungsproblem auf. Dies muss behoben werden, indem korrektes SQL mit korrektem geschrieben wird,JOIN
anstatt dem Problem mit auszuweichenNOT IN
. Bei Verwendung vonNOT IN
oderNOT EXISTS
in diesem Fall können andere Probleme auftreten .Meine Stimme für die oberste, die herkömmliche Methode zum Aktualisieren einer Tabelle basierend auf einer anderen Tabelle durch Beitritt zu SQL Server ist. Wie ich bereits sagte, können Sie
UPDATE
in SQL Server nur dann zwei Tabellen in derselben Anweisung verwenden, wenn Sie sie zuerst verbinden.quelle
es funktioniert mit postgresql
quelle
Ich dachte, dies ist ein einfaches Beispiel, vielleicht könnte es jemand einfacher machen.
quelle
Oracle 11g
quelle
Auf diese Weise können Sie eine Tabelle basierend auf dem Spaltenwert aktualisieren, der in einer anderen Tabelle nicht gefunden wurde.
Dadurch wird eine Tabelle basierend auf dem Spaltenwert aktualisiert, der in beiden Tabellen gefunden wird.
quelle
Versuche dies :
quelle
Ich möchte noch etwas hinzufügen.
Aktualisieren Sie keinen Wert mit demselben Wert, da dies zu zusätzlicher Protokollierung und unnötigem Overhead führt. Siehe Beispiel unten - die Aktualisierung wird nur für 2 Datensätze durchgeführt, obwohl auf 3 verknüpft wird.
quelle
Wenn die obigen Antworten für Sie nicht funktionieren, versuchen Sie dies
quelle