Jump to content

SQL Update Problem


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

ich hänge an einem Problem bisher dachte ich das die Lösung recht einfach aussieht...ich habe mich mal wieder getäuscht.

Szenario:

Tabelle "Basis_C" beinhaltet mehrere Kontakte mit der zugehörigen adresse
Vorname | Name| PLZ | Strasse | Hausnummer | Status | C_verkaufer_nr|

Status sagt aus ob die Hausnummer eine gerade oder ungerade Zahl ist.

Tabelle "Zuordnung_P"
PLZ | Strasse | von |bis |P_Status| P_verkaufer_id |

|von| und |bis| beinhalten die Hausnummer range z.B. 0002 - 0020
P_Status sagt aus ob die Hausnummer zuweisung gerade oder ungerade Hausnummer betrifft.

d.h. eine verkaufs id kann in einer Straße mehrere Zuweisungen haben. Z.B. gerade hausnummern von 2-20 (status gerade) und ungerade Hausnummern vo

n 21-39 (Status ungerade).

Ich dachte ich kann nun via einem Update :

 update Basis_C
     
        set Basis_C.C_verkaufer_nr =
        (
            select Zuordnung_P.P_verkaufer_id
       
               
            from Zuordnung_P, Basis_C
           
            where    Basis_C.Status  = Zuordnung_P.P_status           
                    and Basis_C.Strasse = Zuordnung_P.Strasse
                    and Basis_C.PLZ = Zuordnung_P.PLZ
                    and Basis_C.Hausnummer  >= Zuordnung_P.VON 
                    and Basis_C.Hausnummer  <= Zuordnung_P.BIS
                       
        )
       
    go

die verkäufer_nr upzudaten. Leider scheint es so zu sein dass die Update funktion nicht versteht das in einer straße mit der gleichen Hausnummer mehrere Kontakte sein können.

Hat einer eine idee wie ich das lösen könnte? Leider haben die 2 Tabellen kein wirkliches join Feld.

Link zu diesem Kommentar

 

Szenario:

 

Tabelle "Basis_C" beinhaltet mehrere Kontakte mit der zugehörigen adresse

Vorname | Name| PLZ | Strasse | Hausnummer | Status | C_verkaufer_nr|

 

Status sagt aus ob die Hausnummer eine gerade oder ungerade Zahl ist.

 

Wer kommt denn auf so eine Idee diese Information zu pflegen? Das kann man doch auf der Hausnummer ableiten.

Wieso willst du den Verkäufer in beiden Tabellen pflegen?

Link zu diesem Kommentar

Wer kommt denn auf so eine Idee diese Information zu pflegen? Das kann man doch auf der Hausnummer ableiten.

Wieso willst du den Verkäufer in beiden Tabellen pflegen?

 

Tabelle Zuordnung ist quasi die Auflistung welcher verkäufer für welche straße zuständig ist. Bzw. beinhalt die hausnummereinteilung der straße für den verkäufer (gerade von - bis und ungerade von bis). Die Tabelle Basis_C ist quasi die Kundendatei. Nun muss ich zu jedem Kontakt den Verkäufer updaten.

 

 

 

Beim dem Update musst Du sicherstellen, dass beim Select nur ein Ergebnis kommt. Auch wird Basis_C.C_verkaufer_nr  dann in allen Zeilen ersetzt, da Du kein Where-Statement benutzt....

 

 

Darum geht es ja. Wie stell ich das sicher? Also in dem Fall. Es gibt halt nunmal mehr Kontakte in einer Straße/Hausnummer. Die Kontakte in der Tabelle Basis_C haben eine eindeutige ID. Kann man die eventuell verwenden? Wenn ja wie?

bearbeitet von dsnakas
Link zu diesem Kommentar

Tabelle Zuordnung ist quasi die Auflistung welcher verkäufer für welche straße zuständig ist. Bzw. beinhalt die hausnummereinteilung der straße für den verkäufer (gerade von - bis und ungerade von bis). Die Tabelle Basis_C ist quasi die Kundendatei. Nun muss ich zu jedem Kontakt den Verkäufer updaten.

 

Ja aber wieso pflegst du Daten doppelt (kann ja Gründe haben) und machst keinen Join bei deinen Abfragen und wieso pflegst du Daten, die sich ableiten lassen?

Link zu diesem Kommentar

Lösung ohne Update und doppelte Pflege (wenn gerade = 0 und ungerade = 1 in Tabelle Zuordnung_P):

 

SELECT        Z.Verkäufer, B.Vorname, B.Name, B.PLZ, B.Strasse, B.Hausnummer, Z.Von, Z.Bis, B.Hausnummer % 2 AS gerade, Z.gerade
FROM            dbo.Basis_C AS B INNER JOIN
                         dbo.Zuordnung_P AS Z ON B.PLZ = Z.PLZ AND B.Strasse = Z.Strasse AND B.Hausnummer >= Z.Von AND B.Hausnummer <= Z.Bis AND B.Hausnummer % 2 = Z.gerade

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...