Flori Geschrieben 18. Oktober 2002 Teilen Geschrieben 18. Oktober 2002 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Saga Geschrieben 18. Oktober 2002 Teilen Geschrieben 18. Oktober 2002 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
richard-der-große Geschrieben 18. Oktober 2002 Teilen Geschrieben 18. Oktober 2002 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;) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Flori Geschrieben 18. Oktober 2002 Autor Teilen Geschrieben 18. Oktober 2002 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Saga Geschrieben 18. Oktober 2002 Teilen Geschrieben 18. Oktober 2002 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Flori Geschrieben 18. Oktober 2002 Autor Teilen Geschrieben 18. Oktober 2002 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Saga Geschrieben 18. Oktober 2002 Teilen Geschrieben 18. Oktober 2002 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Der Kleine Geschrieben 19. Oktober 2002 Teilen Geschrieben 19. Oktober 2002 Ist doch ganz korrekt geworden, 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Saga Geschrieben 20. Oktober 2002 Teilen Geschrieben 20. Oktober 2002 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... *lach* Danke fuer die Ergaenzung. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Flori Geschrieben 21. Oktober 2002 Autor Teilen Geschrieben 21. Oktober 2002 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.