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

Geschrieben

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.

Geschrieben

 

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?

Geschrieben (bearbeitet)

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
Geschrieben

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?

Geschrieben

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?

 

Grob umschrieben kommen die Daten aus 2 verschiedenen Quellen. Ich will quasi ein großes ganzes darausmachen. Zählt das Feld1 = Feld 2 nicht als innerjoin?

Geschrieben

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

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

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...