• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage Fehlermeldung in mysql query

Markus92

Mitglied
Mein mysql-query lautet:
Code:
Select besitz.ID, nominal_land.ID, besitz.jahr, besitz.besitz, besitz.kms, besitz.auflage, sonder.buchstabe, nominal_land.gm_id, nominal_land.nominalwert, besitz.wert, counts.anzahl from besitz left outer join sonder on besitz.fk_sonder=sonder.id, nominal_land, motiv, (select count(*), fk_nominal_land as anzahl from besitz group by fk_nominal_land) as counts where besitz.fk_nominal_land=nominal_land.id and nominal_land.fk_land=3 and motiv.id = fk_motiv and counts.fk_nominal_land = besitz.fk_nominal_land  order by nominal_land.nominalwert, nominal_land.Gedenkmünze, besitz.jahr, nominal_land.gm_id, sonder.buchstabe

Als Fehlermeldung erhalte ich:
Unknown column 'counts.fk_nominal_land' in 'where clause'

Ich verstehe die Fehlermeldung nicht, da ich ja counts vorher als subquery definiert habe und darin der Wert fk_nominal_land enthalten ist.

lasse ich das "and counts.fk_nominal_land = besitz.fk_nominal_land" weg funktioniert zumindest die Ausführung des querys - gibt es hier ein mysql-Problem mit subquerys?
 
Werbung:
Da ist aber einiges im Argen bei dem Statement. Das größte Problem verursachst Du dadurch, dass Du 2 Mal WHERE verwendest (auch unabhängig von dem Subquery) und das Du nach einem INNER JOIN eine Art SELECT-Liste fortführst.

Ich weiß ja nicht was inhaltlich rauskommen soll, aber ein korrektes Statement dieser Art würde z.B. so aussehen:
Code:
Select besitz.ID, nominal_land.ID, besitz.jahr, besitz.besitz, besitz.kms, besitz.auflage, sonder.buchstabe, nominal_land.gm_id, nominal_land.nominalwert, besitz.wert,
(select count(*), fk_nominal_land as anzahl from besitz group by fk_nominal_land) as counts, nominal_land, motiv 
from besitz
left outer join sonder on besitz.fk_sonder=sonder.id
where besitz.fk_nominal_land=nominal_land.id and nominal_land.fk_land=3 and motiv.id = fk_motiv and counts.fk_nominal_land = besitz.fk_nominal_land 
order by nominal_land.nominalwert, nominal_land.Gedenkmünze, besitz.jahr, nominal_land.gm_id, sonder.buchstabe
 
Ich habe meinen Fehler gefunden:

ich hatte im subquery
select count*, fk_nominal_land as anzahl
Richtig ist:
select count* as anzahl, fk_nominal_land

jetzt stimmt alles - mit meinem query.
 
Zuletzt bearbeitet:
Werbung:
Ah, jetzt verstehe ich auch worauf Du hinaus willst. Ohne deine Datenbank oder das genaue Ziel zu kennen fällt das etwas schwer.

Was aber soll bei dem SubQuery heraus kommen? Das macht für mich momentan keinen Sinn.
 
Bei dem Subquery soll herauskommen wie oft das jeweilige fk_nominal_land in der Besitz-Tabelle existiert (für den Rowspan einer Tabelle, da alle Wert mit dem selben fk_nominal_land untereinander in der php-Tabelle stehen und vornedran eine Überschrift steht)
 
Da sehe ich 2 Möglichkeiten für:

a)
Code:
Select besitz.ID, nominal_land.ID, besitz.jahr, besitz.besitz, besitz.kms, besitz.auflage, sonder.buchstabe, nominal_land.gm_id, nominal_land.nominalwert, besitz.wert, (select count(*) from besitz where besitz.fk_nominal_land=besitz.fk_nominal_land group by fk_nominal_land) as anzahl
from besitz, nominal_land, motiv
left outer join sonder on besitz.fk_sonder=sonder.id,
where besitz.fk_nominal_land=nominal_land.id and nominal_land.fk_land=3 and motiv.id = fk_motiv  
order by nominal_land.nominalwert, nominal_land.Gedenkmünze, besitz.jahr, nominal_land.gm_id, sonder.buchstabe

b)
Code:
Select besitz.ID, nominal_land.ID, besitz.jahr, besitz.besitz, besitz.kms, besitz.auflage, sonder.buchstabe, nominal_land.gm_id, nominal_land.nominalwert, besitz.wert, count(besitz.fk_nominal_land) as anzahl
from besitz, nominal_land, motiv
left outer join sonder on besitz.fk_sonder=sonder.id,
left join besitz on besitz.fk_nominal_land=besitz.fk_nominal_land
where besitz.fk_nominal_land=nominal_land.id and nominal_land.fk_land=3 and motiv.id = fk_motiv  
group by besitz.fk_nominal_land
order by nominal_land.nominalwert, nominal_land.Gedenkmünze, besitz.jahr, nominal_land.gm_id, sonder.buchstabe

Ungetestet natürlich ;)
 
Werbung:
zu a:
Das funktioniert:
Code:
Select besitz.ID, nominal_land.ID, besitz.jahr, besitz.besitz, besitz.kms, besitz.auflage, sonder.buchstabe, nominal_land.gm_id, nominal_land.nominalwert, besitz.wert, (select count(*) from besitz as besitz1 where besitz1.fk_nominal_land=besitz.fk_nominal_land group by fk_nominal_land) as anzahl 
from motiv, nominal_land, besitz left outer join sonder on besitz.fk_sonder=sonder.id
where besitz.fk_nominal_land=nominal_land.id and nominal_land.fk_land=3 and motiv.id = fk_motiv 
order by nominal_land.nominalwert, nominal_land.Gedenkmünze, besitz.jahr, nominal_land.gm_id, sonder.buchstabe

b bekomme ich so nicht zum laufen
 
Zurück
Oben