【发布时间】:2010-03-12 20:26:58
【问题描述】:
我有这个 Mysql 查询,它有效:
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
结果是:
nom prenom categories areas
Man Multi Carpentry,Paint,Walls Beirut,Baalbak,Saida
它可以正常工作,但只有当我将我想要的 id 硬编码到查询中时 (37)。 我希望它适用于 m3allem 表中的所有条目,所以我试试这个:
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
我得到一个错误:
'where'中的未知列'm.id' 子句'
为什么? 来自 MySql 手册:
13.2.8.7. Correlated Subqueries
[...]
Scoping rule: MySQL evaluates from inside to outside.
所以...当子查询位于 SELECT 部分时,这不起作用吗?我没有读到任何关于它的内容。
有人知道吗?我该怎么办?我花了很长时间来构建这个查询......我知道这是一个怪物查询,但它在一个查询中得到了我想要的,而且我已经很接近让它工作了!
谁能帮忙?
【问题讨论】:
标签: sql mysql scope correlated-subquery