estoy teniendo esta consulta MySQL, Funciona:MySql problema de alcance con subconsultas correlacionadas
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
El resultado es:
nom prenom categories areas
Man Multi Carpentry,Paint,Walls Beirut,Baalbak,Saida
Funciona correclty, pero sólo cuando i codificar en la consulta la identificación que quiero (37). quiero que funcione para todas las entradas en la tabla m3allem, así que intente esto:
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
y me sale un error:
Unknown column 'm.id' in 'where clause'
¿Por qué? Desde el manual de MySQL:
13.2.8.7. Correlated Subqueries
[...]
Scoping rule: MySQL evaluates from inside to outside.
Así que ... hacer esto no funciona cuando la subconsulta está en una sección SELECT? No leí nada sobre eso.
¿Alguien sabe? ¿Que debería hacer? Me llevó mucho tiempo crear esta consulta ... Sé que es una consulta monstruosa, pero obtiene lo que quiero en una sola consulta, ¡y estoy muy cerca de hacer que funcione!
¿Alguien puede ayudar?
¡Funciona! ¡Muchas gracias! No sabía que solo puedes correlacionar un nivel profundo. – Rolf