raban
Goto Top

SQL2005 Import aus Tabelle2 in eine vorhandene Tabelle anhand der Kundennummer

Hallo,
ich habe hier ein Problem (MSSQL2005) und weiss nicht genau wie ich das lösen soll.
Habe eine Tabelle wo schon Datensätze vorhanden sind Name, Adresse, PLZ, Ort, Kundennumemr...etc
In einer zweiten Tabelle habe ich 2 Spalten Kundennummer und Priorität

Die Priorität aus der 2. Tabelle soll nun in das Feld "Priorität" in die erste Tabelle übertragen werden (weiss nicht ob das überhaupt geht)

Tabelle 1 mit den Adressen sieht so aus

dafaabdd7289c2fec6bcc38010a91704-tabelle01

die zweite Tabelle mit den Prioritäten sieht so aus

d6e336acd7f4854313326501060701c5-tabelle02

das Ergebnis wie es nach dem SQL Befehl aussehen soll

547a6dff8cb2c2486938d07daa7efb50-tabelle03


Ich benötige ein SQL Befehl der folgendes tut: ein Vergleich zwischen den 2 Tabellen. Die Kundennummer soll abgeglichen werden, wenn diese in beiden Tabellen gleich sind soll der Wert Priorität aus der Tabelle 2 in das Feld Priorität aus der Tabelle 1 übertragen werden und dem richtigen Kunden zugeordnet werden

Weiss jemand ob das überhaupt machbar ist und wie der SQL-Befehl lauten muss damit das ganze funktioniert?

Vielen Dank schon mal im voraus.

Gruß
Robert

Content-ID: 103819

Url: https://administrator.de/contentid/103819

Ausgedruckt am: 26.11.2024 um 03:11 Uhr

Biber
Biber 11.12.2008 um 08:01:18 Uhr
Goto Top
Moin Raban,

das sollte so gehen:
 UPDATE tabelle1 t1 
JOIN tabelle2 t2 on t1.Kundennummer = t2.Kundennummer
SET t1 Prioritaet = t2.Prioritaet ;
-oder auch-
 UPDATE tabelle1 t1, Tabelle2 t2 
SET t1 Prioritaet = t2.Prioritaet 
WHERE T1.Kundennummer = t2.Kundennummer;

MSSQL unterstützt UPDATEs mit verJOINten Tabellen, bei denen eine Seite des JOINs aktualisiert wird.
Die zweite Syntax ist absolut gleichwertig (INNER JOIN), aber nach meinem Geschmack lesbarer/übersichtlicher.

Grüße
Biber
Raban
Raban 11.12.2008 um 11:11:21 Uhr
Goto Top
Hi,
vielen Dank für die Hilfe. Ich werde das gleich ausprobieren.

Kann man da noch eine Bedingung mit einbauen, wo nur die Kunden angepasst werden wenn diese in der Tabelle01 in der Spalte "Name" mit "EDE" anfangen?

Vielen Dank
Gruß
Robert
Biber
Biber 11.12.2008 um 14:11:03 Uhr
Goto Top
Moin Raban,

Antwort 1)
Du kannst einfach noch ein "WHERE t1.NAME like 'EDE%' an das o.a. UPDATE-Statement (vor das ";") anhängen

Antwort 2)
Du solltest allerdings NIE NIE NIE ein UPDATE-Statement abfeuern, wenn Du nicht vorher mit einem normalen SELECT-Statement geprüft hast, welche Sätze denn betroffen wären.

Grüße
Biber
Raban
Raban 12.12.2008 um 10:20:50 Uhr
Goto Top
Hi Biber,

ich werde nicht schlau wie man den Befehl richtig aufbaut. Ich habe das jetzt so aufgebaut

UPDATE ADDRESSES t1
JOIN tfdiln t2 ON ADDRESSES.CUSTOMERNUMBER0 = tfdiln.Kunde
SET ADDRESSES.TEXT46 = tfdiln.ILN;

aber wenn ich die SQL-Syntax überprüfen lasse kommt dann diese Meldung

"Falsche Syntax in der Nähe von 't1'

die Tabelle die aktualisiert werden muss ist die Tabelle ADDRESSES und zwar die Spalte 'TEXT46' anhand der Kundennummer die abgeglichen werden soll
Die Kundennummer ist in der Tabelle ADDRESSES in der Spalte 'Customernumber0' und in der Tabelle 'tfdiln' in der Spalte 'Kunde'

was mach ich falsch?
Vielen Dank für deine Mühe Biber
Gruß
Robert
Biber
Biber 12.12.2008 um 15:40:01 Uhr
Goto Top
Moin Raban,

ich verwende gerne Tabellen-Alias wie t1, t2 oder auch A, B, C, weil es dann für mich lesbarer/nachvollziehbarer wird.
Der Datenbank ist das vollkommen egal - die kommt auch mit 32stelligen Tabellennamen gut klar.

Nur Du musst Dich entscheiden: wenn Du in einem Statement erstmal "angekündigt" hast, dass Du die Tabelle ADDRESSES ab sofort nur noch "t1" nennst, dann wird sie auch nur noch als "t1" wiedergefunden.

Also entweder OHNE Aliase:
UPDATE ADDRESSES
JOIN tfdiln ON ADDRESSES.CUSTOMERNUMBER0 = tfdiln.Kunde
SET ADDRESSES.TEXT46 = tfdiln.ILN;
-oder mit Aliasen:
UPDATE ADDRESSES t1
JOIN tfdiln t2 ON t1.CUSTOMERNUMBER0 = t2.Kunde
SET t1.TEXT46 = t2.ILN;

... aber nicht Kraut-und-Rüben.

Grüße
Biber
Raban
Raban 16.12.2008 um 06:44:09 Uhr
Goto Top
Hallo Biber,

ich habe jetzt die Logik verstanden. Danke für die Erklärung.
Habe jetzt den SQL Befehl so aufgebaut

UPDATE ADDRESSES
JOIN tfdiln ON ADDRESSES.CUSTOMERNUMBER0 = tfdiln.Kunde
SET ADDRESSES.TEXT46 = tfdiln.ILN;


aber will irgendwie nicht...da kommt folgende Meldung

Fehler bei der SQL Ausführung

Ausgeführte SQL Anweisung: UPDATE ADDRESSES JOIN tfdiln ON ADDRESSES.CUSTOMERNUMBER0 = tfdiln.Kunde SET ADDRESSES.TEXT46 = tfdiln.ILN;

Fehlerquelle .Net SQL Client Data Provider
Fehlermeldung : Falsche Syntax in der Nähe des 'JOIN'-Schlüsselwortes

Hast Du noch eine Idee?

Vielen Dank für deine Mühe
Gruß
Robert
Biber
Biber 16.12.2008 um 08:34:42 Uhr
Goto Top
Moin Raban,
Hast Du noch eine Idee?
An Ideen mangelt es mir selten.
Bist Du denn noch leidensfähig genug? face-wink

Dann machen wir es so:
UPDATE ADDRESSES
SET TEXT46 = t2.ILN
FROM ADDRESSES t1, tfdiln t2 
WHERE  t1.CUSTOMERNUMBER0 = t2.Kunde;
-was wiederum diesem hier entsprechen sollte:
UPDATE ADDRESSES
SET TEXT46 = t2.ILN
FROM ADDRESSES t1 INNER JOIN tfdiln t2 
ON  t1.CUSTOMERNUMBER0 = t2.Kunde;

Probier bitte mal Variante 1 aus.

Grüße
Biber