我需要执行这个查询,就像(主猫和子猫)
以下是我的方案:
++++++++++++++++++++++++++++++++
+ id | Country | Parent |
++++++++++++++++++++++++++++++++
+ 1 | India | |
++++++++++++++++++++++++++++++++
+ 2 | Usa | |
++++++++++++++++++++++++++++++++
+ 3 | California | Usa |
++++++++++++++++++++++++++++++++
+ 4 | New York | Usa |
++++++++++++++++++++++++++++++++
+ 5 | New Delhi | India |
++++++++++++++++++++++++++++++++
+ 6 | France | |
++++++++++++++++++++++++++++++++
我想得到这样的结果:
+++++++++++++++++++++++++++++++++++++++++++++++++
+ id | Country | Num | Childs |
+++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 | India | 1 | New Delhi |
+++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 | Usa | 2 | California,New York |
+++++++++++++++++++++++++++++++++++++++++++++++++
+ 3 | France | 0 | |
+++++++++++++++++++++++++++++++++++++++++++++++++
发布于 2011-10-30 14:21:05
试试这个:
SELECT t1.id, t1.Country,
(SELECT COUNT(id) FROM world t2
WHERE t2.Parent = t1.Country) as Num,
(SELECT GROUP_CONCAT(Country) FROM world t3
WHERE t3.Parent = t1.Country) as Childs
FROM world t1
WHERE t1.Parent IS NULL
IT的工作原理
我的查询由一个主部分和两个子查询(圆括号之间的部分)组成;您可以将一个子查询看作是在主查询中执行的一个常规查询,该查询返回到这个字段(列)。子查询可以与主查询交互,因为它们可以在SELECT或WHERE中使用主字段。
主要部分获取所有基础国家(没有父的国家)
SELECT t1.id, t1.Country
FROM world t1
WHERE t1.Parent IS NULL
第一个子查询获取(对于main部分中的每个项目)父项目为main项目的国家的计数
SELECT COUNT(id) FROM world t2
WHERE t2.Parent = t1.Country
请注意,在WHERE
子句中,我要求匹配子查询id与父id,因此我只获得与主条目相关的国家计数。
第二个子查询类似于第一个子查询,但使用GROUP_CONCAT函数返回一个不同的字段,以获得用逗号分隔的所有子国家。
发布于 2011-10-30 14:20:57
查看GROUP_CONCAT。
https://stackoverflow.com/questions/7945407
复制