MySQL-Scoping-Problem mit korrelierten Unterabfragen
Ich habe diese Mysql-Abfrage, es funktioniert:
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 korrekt, aber nur, wenn ich die ID, die ich will, fest in die Abfrage einprogrammiere (37). Ich möchte, dass es für alle Einträge in der m3allem-Tabelle funktioniert, also versuche ich Folgendes:
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 bekomme einen Fehler:
Unbekannte Spalte 'm.id' in 'where-Klausel'
Warum? Aus dem MySQL-Handbuch:
13.2.8.7. Correlated Subqueries
[...]
Scoping rule: MySQL evaluates from inside to outside.
Also ... funktioniert dies nicht, wenn sich die Unterabfrage in einem SELECT-Abschnitt befindet? Ich habe nichts darüber gelesen.
Weiß jemand? Was soll ich machen? Es hat lange gedauert, bis ich diese Abfrage erstellt habe ... Ich weiß, dass es sich um eine Monsterabfrage handelt, aber mit einer einzigen Abfrage kann ich genau das erreichen, was ich will, und ich bin so kurz davor, sie zum Laufen zu bringen!
Kann jemand helfen?