Ich habe diese Mysql-Abfrage, es funktioniert:MySql Scoping Problem mit korrelierten Unterabfragen
SELECT
nom
,prenom
,(SELECT GROUP_CONCAT(category_en) FROM
(SELECT DISTINCT category_en FROM categories c WHERE id IN
(SELECT DISTINCT category_id FROM m3allems_to_categories m2c WHERE m3allem_id = 37)
) cS
) categories
,(SELECT GROUP_CONCAT(area_en) FROM
(SELECT DISTINCT area_en FROM areas c WHERE id IN
(SELECT DISTINCT area_id FROM m3allems_to_areas m2a WHERE m3allem_id = 37)
) aSq
) areas
FROM m3allems m
WHERE m.id = 37
Das Ergebnis ist:
nom prenom categories areas
Man Multi Carpentry,Paint,Walls Beirut,Baalbak,Saida
Es funktioniert Correclty, aber nur, wenn ich hart codieren in die Abfrage die ID, die ich will (37). Ich möchte es für alle Einträge in der Tabelle m3allem arbeiten, so dass ich versuchen Sie dies:
SELECT
nom
,prenom
,(SELECT GROUP_CONCAT(category_en) FROM
(SELECT DISTINCT category_en FROM categories c WHERE id IN
(SELECT DISTINCT category_id FROM m3allems_to_categories m2c WHERE m3allem_id = m.id)
) cS
) categories
,(SELECT GROUP_CONCAT(area_en) FROM
(SELECT DISTINCT area_en FROM areas c WHERE id IN
(SELECT DISTINCT area_id FROM m3allems_to_areas m2a WHERE m3allem_id = m.id)
) aSq
) areas
FROM m3allems m
Und ich erhalte eine Fehlermeldung:
Unknown column 'm.id' in 'where clause'
Warum? Aus dem MySQL-Handbuch:
13.2.8.7. Correlated Subqueries
[...]
Scoping rule: MySQL evaluates from inside to outside.
So ... funktioniert nicht, wenn die Unterabfrage in einer SELECT-Sektion ist? Ich habe darüber nichts gelesen.
Weiß jemand? Was soll ich machen? Ich habe lange gebraucht, um diese Abfrage zu erstellen ... Ich weiß, dass es eine Monsterabfrage ist, aber es bekommt, was ich will, in einer einzigen Abfrage, und ich bin so kurz davor, es zum Laufen zu bringen!
Kann jemand helfen?
Es funktioniert! Vielen Dank! Ich wusste nicht, dass man nur eine Ebene tief korrelieren kann. – Rolf