![]() |
Re: Firebird: MINUS bzw. EXCEPT
Hier mal die beiden Versionen im Vergleich:
SQL-Code:
select persnr from assistenten a where not exists (select persnr from assistenten s WHERE s.persnr >a.boss)
SQL-Code:
Warum die erste Version bei Dir kein Ergebnis geliefert hat, ist mir ein Rätsel.
select a1.* from ass a1
where not exists (select a2.assnr from ass a2 where (a2.assnr>=a2.bossnr) and (a2.bossnr=a1.bossnr)) Richtig ist allerdings das zweite Statement. In dem ersten Statement überprüfst Du nur, ob es irgendeine Persnr ist, die größer der aktuellen bossnr gibt, in der zweiten wird wie gewollt überprüft, ob es eine persnr gibt, die dem aktuellen boss zugeordnet ist und diese dann größer der aktuellen bossnr ist. Hoffe das hilft Dir weiter. Gruß Thomas |
Re: Firebird: MINUS bzw. EXCEPT
Hi!
Danke für die Erläuterungen - also von den geposteten Anfragen funktioniert in der Tat nur die hier:
SQL-Code:
Alle anderen liefern leere Resultate.
select a1.* from ass a1
where not exists (select a2.assnr from ass a2 where (a2.assnr>=a2.bossnr) and (a2.bossnr=a1.bossnr)) Es handelt sich um Firebird 2.1.2.18118 Grüße, Frederic |
Re: Firebird: MINUS bzw. EXCEPT
Das SQL Nr.1 nicht funktioniert ist nur logisch.
Die Unterabfrage lautet: Existiert irgendeine "persnr" die größer ist als die "persnr" des in der Hauptabfrage gerade bearbeiteten Bosses. Wenn der Boss nicht gerade die höchste Nummer in der gesamten Tabelle hat, ist diese Bedingung immer erfüllt. Dann wird das Ergebnis negiert und darum der Datensatz der Hauptabfrage verworfen. Im SQL Nr.2 wird die Unterabfrage auf die Personen eingeschränkt, denen tatsächlich diesem Boss zugeordnet ist. |
Re: Firebird: MINUS bzw. EXCEPT
Hi!
Danke für deine Erläuterung - das erscheint mir jetzt auch durchaus logisch - aber wieso geht es dann bei Heiko? Grüße, Frederic |
Re: Firebird: MINUS bzw. EXCEPT
Hallo Frederic,
enthält Deine Tabelle tatsächlich nur diese Daten: Zitat:
SQL-Code:
findet nun für die beiden letzten Datensätze keinen Datensatz, bei dem die Persnr > der bossnr (5555) ist. Also gibt es ein Ergebnis.
select persnr from assistenten a where not exists (select persnr from assistenten s WHERE s.persnr >a.boss)
Dieses entspräche in dieser Abfrage zufällig dem richtigen Ergebnis. Fügst Du jetzt aber folgenden Datensatz an, gibt es eine leere Erbebnismenge: Zitat:
Zitat:
Hilft Dir das weiter? |
Re: Firebird: MINUS bzw. EXCEPT
Hi!
Ah, dann war es quasi Zufall... Das hier gepostete war nur ein Teil der Ausprägung, die in der Testtabelle drin sind. Vielen Dank für die ausführliche Erläuterung. Grüße, Frederic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz