Problem mit Subquery
Yadgar
- datenbank
0 Frank (no reg)0 Yadgar
0 Rouven0 Struppi
0 Yadgar
0 Yadgar
High!
Weiter geht es mit der Elektroorgel-Datenbank... jetzt möchte ich mir gerne alle dreimanualigen Orgeln anzeigen lassen, also alle Orgeln, die in der Relationstabelle "orgeln_klaviaturen" genau 4 Einträge haben.
Ich probierte es mit folgender Abfrage:
select orgeln.Modell from orgeln where orgeln.Nr=orgeln_klaviaturen.Orgel_Nr and (select count(*) as Manuale from orgeln_klaviaturen group by Orgel_Nr)=4;
...und bekam prompt die Fehlermeldung
ERROR 1054 (42S22): Unknown column 'orgeln_klaviaturen.Orgel_Nr' in 'where clause'
Wieso? Orgel_Nr ist als Spalte in orgeln_klaviaturen vorhanden!
Bis bald im Khyberspace!
Yadgar
Hallo,
in
Select orgeln.Modell from orgeln where ...
sehe ich nur "from orgeln", aber nichts von orgeln_klaviaturen als Tabelle von der man Felder auswählen könnte.
Du möchstest stattdessen eher einen JOIN auf
..
FROM Orgeln
LEFT OUTER JOIN
(select Orgel_Nr, count(*) as Manuale
from orgeln_klaviaturen
group by Orgel_Nr) AS andereTabelle
machen und dann "andereTabelle" in der WHERE Clause benutzen, die ja dann "Orgel_Nr" enthalten würde.
HTH, Ciao, Frank
High!
select orgeln.Modell from orgeln left outer join (select count(*) from orgeln_klaviaturen group by Orgel_Nr) as Andere_Tabelle where orgeln.Nr=Andere_Tabelle.Orgel_Nr and count(*)=4;
funktioniert auch nicht - "Error near orgeln.Nr=Andere_Tabelle.Orgel_Nr and count(*)=4"!
Was mache ich falsch?
Bis bald im Khyberspace!
Yadgar
Hallo,
select orgeln.Modell from orgeln left outer join (select count(*) from orgeln_klaviaturen group by Orgel_Nr) as Andere_Tabelle where orgeln.Nr=Andere_Tabelle.Orgel_Nr and count(*)=4;
Was mache ich falsch?
select
orgeln.Modell
from orgeln
left outer join
(select count(*) AS Anzahl -- hier solltest du einen Alias vergeben, damit das Feld ausserhalb (im äusseren Select) verwendbar ist
,Orgel_Nr -- das brauchst du auch als Ausgabe, damit du den Join machen kannst
from orgeln_klaviaturen
group by Orgel_Nr) as Andere_Tabelle
on orgeln.Orgel_Nr = Andere_Tabelle.Orgel_Nr -- die Join-Klausel hast du total vergessen, so wie du das mit WHERE versucht hast, geht es nicht
where Andere_Tabelle.Anzahl = 4; -- count(*) ist an der Stelle nicht möglich, ausserdem hast du doch schon den count(*) als Anzahl aus dem inneren Join
Hilft das weiter?
Ciao, Frank
High!
Hilft das weiter?
Bingo! Danke für den Tipp! Jetzt müsstest du mir nur noch privat per Mail deinen Namen rüberwachsen lassen, damit ich dich auf der "Credits"-Seite meines Datenbank-Projekts (URL voraussichtlich: http://www.bergisch-afghanistan.de/greenbook/) nennen kann!
Bis bald im Khyberspace!
Yadgar
Oops, meine E-Mail: yazdegird@gmx.de !
Hello,
Wieso? Orgel_Nr ist als Spalte in orgeln_klaviaturen vorhanden!
möglich, aber orgeln_klaviaturen nicht in deiner FROM-Klausel. Überhaupt erscheint mir das Subselect nicht viel Sinn zu machen, da es keinerlei Verbindung zum Hauptteil aufweist. Kann es sein, dass du (weder inhaltlich noch syntaktisch riesig überprüft) etwa sowas suchst:
SELECT orgeln.Modell
FROM orgeln AS o
WHERE (SELECT COUNT(*) AS Manuele FROM orgeln_klaviaturen WHERE o.Nr = Ordel_Nr GROUP BY Orgel_Nr) = 4
MfG
Rouven
Weiter geht es mit der Elektroorgel-Datenbank... jetzt möchte ich mir gerne alle dreimanualigen Orgeln anzeigen lassen, also alle Orgeln, die in der Relationstabelle "orgeln_klaviaturen" genau 4 Einträge haben.
Ich probierte es mit folgender Abfrage:
select orgeln.Modell from orgeln where orgeln.Nr=orgeln_klaviaturen.Orgel_Nr and (select count(*) as Manuale from orgeln_klaviaturen group by Orgel_Nr)=4;
Müßte das nicht ein LEFT JOIN sein? In etwa so
SELECT orgeln.Modell, count(Orgel_Nr) as Manuale
FROM orgeln LEFT JOIN orgeln_klaviaturen ON orgeln.Nr = orgeln_klaviaturen.Orgel_Nr
WHERE Manuale = 4
Von wegen Groß und Kleinschreibung solltest du konsequenter sein, besser ist sowieso alles klein zu schreiben.
Struppi.
High!
Müßte das nicht ein LEFT JOIN sein? In etwa so
SELECT orgeln.Modell, count(Orgel_Nr) as Manuale
FROM orgeln LEFT JOIN orgeln_klaviaturen ON orgeln.Nr = orgeln_klaviaturen.Orgel_Nr
WHERE Manuale = 4
Leider auch nicht:
ERROR 1054 (42S22): Unknown column 'Manuale' in 'where clause'
...und überhaupt, müsste da nicht irgendwo ein GROUP BY stehen?
Bis bald im Khyberspace!
Yadgar
High!
Das hier wieder funktioniert:
select orgeln.Modell, count(Orgel_Nr) from orgeln inner join orgeln_klaviaturen on orgeln.Nr=orgeln_klaviaturen.Orgel_Nr group by Orgel_Nr;
Aber wie bekomme ich diese Auswahl auf die Orgeln mit genau 4 Einträge in orgeln_klaviaturen eingegrenzt?
Bis bald im Khyberspace!
Yadgar