Tôi đang gặp truy vấn Mysql này, Nó hoạt động:MySql Phạm vi vấn đề với truy vấn con tương quan
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
Kết quả là:
nom prenom categories areas
Man Multi Carpentry,Paint,Walls Beirut,Baalbak,Saida
Nó hoạt động correclty, nhưng chỉ khi tôi hardcode vào truy vấn id mà tôi muốn (37). Tôi muốn nó làm việc cho tất cả các mục trong bảng m3allem, vì vậy tôi cố gắng này:
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
Và tôi nhận được một lỗi:
Unknown column 'm.id' in 'where clause'
Tại sao? Từ hướng dẫn MySql:
13.2.8.7. Correlated Subqueries
[...]
Scoping rule: MySQL evaluates from inside to outside.
... Vì vậy, làm điều này không làm việc khi subquery là trong một phần CHỌN? Tôi không đọc gì về điều đó.
Có ai biết không? Tôi nên làm gì? Nó đã cho tôi một thời gian dài để xây dựng truy vấn này ... Tôi biết đó là một truy vấn quái vật nhưng nó được những gì tôi muốn trong một truy vấn duy nhất, và tôi rất gần để làm cho nó hoạt động!
Có ai giúp được không?
Nó hoạt động! Cảm ơn rất nhiều! Tôi không biết rằng bạn chỉ có thể tương quan một cấp độ sâu. – Rolf