mam tej kwerendy MySQL Działa:MySql Problem scoping z skorelowanych podkwerend
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
Wynikiem jest:
nom prenom categories areas
Man Multi Carpentry,Paint,Walls Beirut,Baalbak,Saida
Działa correclty, ale tylko wtedy, gdy zakodować w zapytaniu id, którego chcę (37). chcę go do pracy dla wszystkich wpisów w tabeli m3allem, więc spróbuj tego:
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
I pojawia się błąd:
Unknown column 'm.id' in 'where clause'
Dlaczego? z podręcznika MySQL:
13.2.8.7. Correlated Subqueries
[...]
Scoping rule: MySQL evaluates from inside to outside.
Więc ... Czy to nie działa, gdy podzapytanie jest w sekcji SELECT? Nic o tym nie czytałem.
Czy ktoś wie? Co powinienem zrobić? Zbudowanie tego zapytania zajęło mi dużo czasu ... Wiem, że jest to monster query, ale dostaje to, czego chcę w jednym zapytaniu, a ja jestem tak blisko, żeby to działało!
Czy ktoś może pomóc?
Działa! Wielkie dzięki! Nie wiedziałem, że można skorelować tylko jeden poziom głębokości. – Rolf