select Anweisungen verschachteln

17/03/2010 - 18:29 von Nicole Wagner | Report spam
Hallo User,


mein SQL-Buch sagt, man koenne select-Anweisungen auch verschachteln.
Und bringt ein leider nur sehr kurzes Beispiel.

Diesem Beispiel nach habe ich diese (inhaltlich sinnlose) Anfrage
gestellt:

select jdatum
from tbKalender
where (select jdatum from tbKalender) = 37180;

JDatum steht fuer julianisches Datum, - das in einem Kalender sicher
nur jeweils einmal vorkommt. Unique ist das Feld zur Sicherheit auch.

Ich bekomme die Fehlermeldung, dass ich multiple Anweisungen in eine
Single-tone Selektion gestellt haette.
Ich verstehe die Fehlermeldung nicht.

Wo ist mein Denkfehler?
(Firebird Datenbank).
Bitte um Nachsicht mit mir. Wenn Du das seit Jahren machst, kannst Du
Dir vermutlich gar nicht mehr vorstellen, was daran unklar sein sollte.


Was ich konkret machen will, ist recht komplexe
Selectabfragenergebnisse weiterzuverwenden. Ich brauche im Grunde 4
Abfragen, die ich am liebsten untereinanderschreiben wuerde.
Select . as Var1;
Select alle Var1 und dafuer je select Var2;
Select alle Var2 und dafuer je Var 3;



Danke fuer Tipps!


Nicole
 

Lesen sie die antworten

#1 Matthias Hanft
17/03/2010 - 19:46 | Warnen spam
Nicole Wagner schrieb:

Diesem Beispiel nach habe ich diese (inhaltlich sinnlose) Anfrage
gestellt:

select jdatum
from tbKalender
where (select jdatum from tbKalender) = 37180;



Auch syntaktisch sinnlos, daher...

Ich bekomme die Fehlermeldung, dass ich multiple Anweisungen in eine
Single-tone Selektion gestellt haette.



Hinter WHERE muß eine Spalte kommen. Du fragst nach Ergebnissen
WHERE <<ja_was_denn_nun???>> im Ergebnis des Subselects enthalten
ist (das auch noch mehrere Zeilen liefern kann, so daß man wohl
eher mit IN selektieren müßte).

Also eher sowas wie

select * from tbKalender
where jdatum=(select MAX(jdatum) from tbKalender);

dann kriegst Du die Zeile mit dem größten Datum zurück. Und wenn
im Subselect mehrere Zeilen zurückkommen, mit IN abfragen (glaub
ich jedenfalls, verwende ich fast nie), also etwa

select * from tbKalender
where jdatum IN (select jdatum from tbKalender WHERE jdatum between '01.01.2010' and '31.12.2010');

oder so àhnlich. Wobei das, was Du machen willst, von SQL-Gurus (ich
bin keiner) sicher auch ganz ohne Subselects geschrieben werden kann :-)

Gruß Matthias.

Ähnliche fragen