Zum Inhalt springen

Datensätze "vergleichen" mit SQL ?!


Flori

Empfohlene Beiträge

Hallo,

glaub ich denke heut so kurz vor dem Feierabend mal wieder zu kompliziert, oder ?!

Vielleicht kann mir da noch jemand auf die Sprünge helfen :

Habe eine Tabelle "Status" mit einer Spalte "Kunden-ID" und dem "Bestellstatus", wobei bedeuten soll :

1 = Bestellung aufgenommen

2 = Bestellung ausgeführt

Sieht dann so aus :


Kunden-ID           Bestellstatus

--------------          ----------------

1                                 1

1                                 2

2                                 1

2                                 2

3                                 1

4                                 1

Nun wäre es sehr schön, wenn ich via SQL ne Möglichkeit finden würde, daß mir ausgibt, welche Kunden noch nicht mit dem Bestellstatus 2 in der Liste vermerkt sind, also müßten am Ende die Kunden-ID 3 und 4 ausgegeben werden.

Nur nach "Bestellstatus<>2" zu suchen und die auszuschließen wo das zutrifft, nützt ja nur zur Hälfte was und gibt dann alle Sätze aus mit Bestellstatus=1, also auch wo es auch einen entsprechenden "2er" für gibt !

Es muß also noch ein bissel anders aussähen !

Hoffe, daß Problem ist klar geworden und jemand hat nen SQL-Vorschlag oder sonstwelche Lösungsvorschläge !

Danke und schon mal schönes WE, wenn man sich nicht mehr "liest" ! ;)

Flori

Link zu diesem Kommentar
Auf anderen Seiten teilen

Probier das mal:

select s.kunden-id, s.bestellstatus from status as s where s.bestellstatus=1 and not exists(select bestellstatus from status where kunden-id = s.kunden-id and bestellstatus=2)

Ich kenn jetzt Deine DB nicht, so geht's zumindest bei Sybase.

Have a nice weekend. ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi!

So wie ich das sehe, hast Du Deine Tabelle in der zweiten Normalform!

Damit Du aber keine Probleme damit hast, musst Du sie in die dritte Normalform, normalisieren!

Du kanst nicht Kunden-ID und Bestellstatus miteinander verknüpfen!

Du musst z.B. Bestellung-ID und Kunden-Id verknüpfen (Foreign-Key).

Ich hoffe das hilft Dir weiter!

Viel Spaß noch!

richard-der-große;) ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Thx a lot Saga :e@sy

für deine so schnelle und vor allem richtige Antwort ! Kann ich genauso bei mir verwenden.

Was mir fehlte war das "not exists", ansonsten stimmte bei mir schon alles.

Ist doch einfach, wenn man weiß welches "Bindewort" man braucht.... *g*

Nochmals schönes Wochenende

:cool:

Flori

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Flori

Thx a lot Saga :e@sy

für deine so schnelle und vor allem richtige Antwort ! Kann ich genauso bei mir verwenden.

Was mir fehlte war das "not exists", ansonsten stimmte bei mir schon alles.

*blush* *freu* Freut mich, dass es geholfen hat. :) :e@sy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sorry Saga,

jetzt muß ich doch nochmal stören.... :-/


select s.kunden-id, s.bestellstatus from status as s 

where s.bestellstatus=1 and 

not exists

(select bestellstatus from status 

where [B]kunden-id = s.kunden-id and [/B] bestellstatus=2)

Das Ergebnis der Abfrage aus dem Klammerdruck bekomme ich ja auch, wenn ich "nur"

select bestellstatus from status 

where bestellstatus=2

ausführe.

Nur wenn ich das dann hinter dem NOT EXISTS verwende, werden keine passenden Sätze zurück geliefert ?!

Also liegt der "Trick" tatsächlich darin zwischen dem Vergleich kunden-id = s.kunden-id and ?! Inwieweit spielt der Alias "s" hier eigentlich die Rolle ?! :confused:

Wäre Dir nochmals dankbar, wenn Du in einer ruhigen Minute doch nochmal mit Worten erklären könntest, was in Deinem Statement im einzelnen passiert (soweit das so hier im Forum möglich ist...).

Gruß Flori

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Flori

Sorry Saga,

jetzt muß ich doch nochmal stören.... :-/

1. Du stoerst nicht. 2. No prob. ;)

Also liegt der "Trick" tatsächlich darin zwischen dem Vergleich kunden-id = s.kunden-id and ?! Inwieweit spielt der Alias "s" hier eigentlich die Rolle ?! :confused:

Also wenn ich das richtig verstehe: Die Abfrage, die ich gepostet habe, funktioniert und Du willst wissen warum sie so funktioniert, right? Gleich vorweg: ich bin nicht so der Hit im Erklären. Ich versuche es, aber ich kann nicht garantieren, dass Du es verstehst. ;) Also wenn's jemand besser weiss bin ich nicht böse wenn er/sie mich korrigiert. ;)

Der Trick ist tatsaechlich der Vergleich der Kunden-ID's. Du suchst ja alle Kunden, die zwar Bestellstatus 1 haben, nicht aber Nummer 2. Dafuer brauchst Du die not exists-Anweisung. Damit die Dir wirklich nur die Kunden mit 1 aber ohne 2 bringt, musst Du logischerweise auch die IDs vergleichen. Jetzt hast Du das Problem, dass beide Sachen in einer Table stehen und wenn Du sagst where kunden-id = kunden-id bringt er Dir immer alle Datensaetze, weil diese Where-Klausel immer wahr ist. (1 ist immer 1, 2 ist immer 2, usw.)

Und jetzt kommt der Part an dem ich mir schwer tue mit erklären...

Mit der Abfrage vergleichst Du zwar effektiv die Spalte mit sich selbst, aber durch den Alias ist es quasi so, als wuerdest Du es mit einer anderen Tabelle vergleichen.

Hoffe, das bringt Dich irgendwie weiter...und dass es nicht der totale Muell war. *lach*

Alles Liebe

Saga

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Gdanitz

durch den Aufruf von "select bestellstatus from status " in der Where - Klammer ist praktisch eine zweite Instanz (Kopie) der Tabelle ins Leben gerufen, die das Feld "kunden-id " besitzt.

Joah, das lag mir auf der Zunge... :rolleyes: *lach* :D Danke fuer die Ergaenzung. ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Saga

Und jetzt kommt der Part an dem ich mir schwer tue mit erklären...

Mit der Abfrage vergleichst Du zwar effektiv die Spalte mit sich selbst, aber durch den Alias ist es quasi so, als wuerdest Du es mit einer anderen Tabelle vergleichen.

Hoffe, das bringt Dich irgendwie weiter...und dass es nicht der totale Muell war. *lach*

Alles Liebe

Saga

Wunderbar ! Danke nochmal ! :)

Genau diese Stelle war für mich selbst auch schwer zu erklären. Wenn ich es hätte jemandem erklären müssen, hätte ich es aber genauso gemacht. ;)

Bringt mich auf jeden Fall weiter :

ich kann es wie schon gesagt genau so benutzen und habe auch eine verständliche Erklärung dafür !

Bis demnächst dann ! :)

Flori

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

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

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

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

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...