AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird: MINUS bzw. EXCEPT
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird: MINUS bzw. EXCEPT

Ein Thema von fkerber · begonnen am 21. Jul 2009 · letzter Beitrag vom 21. Jul 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#1

Firebird: MINUS bzw. EXCEPT

  Alt 21. Jul 2009, 07:42
Datenbank: Firebird • Version: 2 • Zugriff über: SQL
Hi!

Stellen wir uns vor, es ist folgende Tabelle "Assistenten" gegeben:

PersNR, Name, Boss
1111, Meier, 2345
2456, Schmidt, 2345
3456, Müller, 5555
3457, Maus, 5555


Wie muss eine Abfrage aussehen, die mir alle die Assistenten zurückgibt, bei deren Boss niemand beschäftigt ist, der eine größere PersNr hat?
Also ich hätte als Ergebnis gerne 3456 und 3457, aber nicht 1111, weil bei 2345 jemand angestellt ist mit größerer Nummer (2456).

Das Ganze soll an sich mit MINUS bzw. EXCEPT gehen, aber das kennt FireBird beides nicht.
Meine Versuche es mit EXISTS nachzubilden gingen schief...


Grüße,
Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Firebird: MINUS bzw. EXCEPT

  Alt 21. Jul 2009, 08:04
Hallo,

ueig doch mal deine Exists-Versuche.
Das ist auf jeden Fall schon mal ein Ansatz.

BTW:
Wer zum Teufel braucht so eine Abfrage ?


Ausserdem:
3456, Müller, 5555
3457, Maus, 5555

die 3456 darf er doch auch nicht zurückgeben,
weil beim Boss 5555 ja die 3457, also grösser als die 3456 angestellt ist ???


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: Firebird: MINUS bzw. EXCEPT

  Alt 21. Jul 2009, 08:19
Hi!

Es ist ja nur ein Beispiel - Grundlagen-Vorlesung lässt grüßen.

Die Ausgabe der beiden Tupel ist schon gewollt, das mit dem größer soll sich nur auf den Vergleich PersNr zu Boss beziehen und 3456 und 3457 sind kleiner als 5555 - was mit denen untereinander ist, ist egal.

Hier der fehlgeschlagene exists-Versuch:

select persnr from assistenten a where not exists (select persnr from assistenten s WHERE s.persnr >a.boss) Das liefert aber ein leeres Ergebnis.

Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Firebird: MINUS bzw. EXCEPT

  Alt 21. Jul 2009, 08:28
Hallo,

also ...
Du willst alle die Ass.Nummern, wo keiner eine größere Nummer also der Boss hat ?

Dann etwa so
SQL-Code:
select a1.* from ass a1
where not exists
(select a2.assnr from ass a2
  where (a2.assnr>=a2.bossnr) and
  (a2.bossnr=a1.bossnr))

Aber eine Warnung:
Subselects unter FB gelten nicht gerade als superschnell,
das select a2... wird ja für jeden Datensatz ausgeführt.
Auf AssNr und BossNr sollten auf jeden Fall Indizes sein.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#5

Re: Firebird: MINUS bzw. EXCEPT

  Alt 21. Jul 2009, 08:32
Genau, ich will alle die Assistenten bei denen kein Kollege (also niemand beim gleichen Boss) eine Personalnr hat, die größer ist als die des (gemeinsamen) Bosses.

PersNR, Name, Boss
1111, Meier, 2345
2456, Schmidt, 2345
3456, Müller, 5555
3457, Maus, 5555

Deswegen wären es bei dieser Ausprägung die Nummern 3456 und 3457, weil bei 5555 eben nur Leute mit kleinerer Nummer arbeiten (und das sind eben 3456 und 3457). 1111 und 2456 sind nicht dabei, da bei 2345 jemand arbeitet, der eine größere Nummer (2456) hat.


Es soll aber quasi nur ein Beispiel sein.
Die Kernfrage ist, wie man MINUS in FB nachbauen kann. Dazu fand ich per Google eben diesen Weg mit NOT EXISTS, der aber scheinbar so nicht das tut, was er soll....


Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Firebird: MINUS bzw. EXCEPT

  Alt 21. Jul 2009, 08:38
Hallo,

MINUS kannte ich gar nicht

Firebird Minus


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#7

Re: Firebird: MINUS bzw. EXCEPT

  Alt 21. Jul 2009, 08:42
Genau auf dieser Seite war ich ja - daher stammt ja die Idee MINUS durch EXISTS auszudrücken - aber es funktioniert leider nicht - zumindest nicht so. Da kommt statt 3456+3457 ne leere Antwort raus.


Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Firebird: MINUS bzw. EXCEPT

  Alt 21. Jul 2009, 09:10
Hallo,

auch hiermit ?

SQL-Code:
select a1.* from ass a1
where not exists
(select a2.assnr from ass a2
  where (a2.assnr>=a2.bossnr) and
  (a2.bossnr=a1.bossnr))
Da kommen bei mir brav die letzten beiden Nummern.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#9

Re: Firebird: MINUS bzw. EXCEPT

  Alt 21. Jul 2009, 09:17
Sehr schön - bei mir auch - werde mal nachher versuchen zu verstehen, warum das geht und das andere nicht...

Danke!


Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Firebird: MINUS bzw. EXCEPT

  Alt 21. Jul 2009, 09:42
Hallo,

also bei mir liefert

select persnr from assistenten a where not exists (select persnr from assistenten s WHERE s.persnr >a.boss) auch die beiden letzten Nummern zurück (getestet unter FB1.5 und FB2.1).

Ich würde aber sicherheitshalber

select a.persnr from assistenten a where not exists (select s.persnr from assistenten s WHERE s.persnr >a.boss) schreiben


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz