Fehler bei erweiterter Select-Abfrage

Themen rund um den praktischen Einsatz von Firebird. Fragen zu SQL, Performance, Datenbankstrukturen, etc.

Moderator: thorben.braun

Antworten
hubert17
Beiträge: 6
Registriert: Di 22. Mär 2022, 13:19

Hallo Zusammen,

ich habe folgende Abfrage

Code: Alles auswählen

select pos.* 
from tree join pos on tree.id = pos.ebindex 
where tree.katid = 1119 and 
tree.ehoeher = (select tree.ID from tree where tree.katid = 1119 and tree.ehoeher = '1' and tree.nummer = 1) 
and tree.nummer = 3 order by sortnr
Diese liefert mir Datensätze.
Da ich nun die Ausgabe der Anzahl der Datensätze begrenzen möchte, habe ich die Abfrage erweitert:

Code: Alles auswählen

select first 5 * from
(select pos.* 
from tree join pos on tree.id = pos.ebindex 
where tree.katid = 1119 and 
tree.ehoeher = (select tree.ID from tree where tree.katid = 1119 and tree.ehoeher = '1' and tree.nummer = 1) 
and tree.nummer = 3 order by sortnr)
Diese gibt nun einen Fehler aus, SQL error = - 104, Token unknown - line 4, column 86, 1.

Der Fehler scheint an der Stelle

Code: Alles auswählen

tree.ehoeher = (select tree.ID from tree where tree.katid = 1119 and tree.ehoeher = '1' and tree.nummer = 1)
zu sein, denn wenn ich die select-Abfrage mit einem richtigen Wert ersetze,

Code: Alles auswählen

tree.ehoeher = 'F891DFDC18334506A91DD444228A7777'
dann ist der Fehler dort.

Kann man gegebenenfalls die Abfrage umstellen?
Bei uns läuft Firebird 2.5.

Wäre für Hilfe und Anregungen dankbar.
Gruß Hubert
bfuerchau
Beiträge: 607
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Versuche es mal mit

Code: Alles auswählen

select first 5  hugo.* from
(select pos.* 
from tree join pos on tree.id = pos.ebindex 
where tree.katid = 1119 and 
tree.ehoeher = (select tree.ID from tree where tree.katid = 1119 and tree.ehoeher = '1' and tree.nummer = 1) 
and tree.nummer = 3 order by sortnr
) hugo
Begründung:
Es heißt ja "first expression " und da du "5 * " angibst, fehlt dem SQL halt noch was.
Hugo steht natürlich nur für ein Synonym. :D
hubert17
Beiträge: 6
Registriert: Di 22. Mär 2022, 13:19

Vielen Dank für deine Antwort.
Werde mir die schreibweise merken. Daran liegt es leider nicht.
Wie schon oben gesagt, liegt es an der Zeile

Code: Alles auswählen

tree.ehoeher = (select tree.ID from tree where tree.katid = 1119 and tree.ehoeher = '1' and tree.nummer = 1)
Ich habe mit diese Select-Abfrage ein View erstellt und dies dann dafür eingesetzt.

Code: Alles auswählen

tree.ehoeher = (select * from view_ehoeher) 
Jetzt funktioniert es zumindest wie gewünscht, würde aber gern auf die VIEW-Erstellung verzichten.

Gruß Hubert
Antworten