在mysql中使用单个查询获取子类别的父名称

时间:2012-05-03 07:51:11

标签: mysql

我有一个名为“category”的mysql表。基本结构如下所示 -

------     --------     ------
cat_id     cat_name     parent
------     --------     ------
1          test1        NULL
2          test2        NULL
3          test3        2
4          test4        1
5          test5        3

现在我希望在单个查询中包含父类别名称(不仅是id)的所有类别数据。那可能吗?我可以通过在while循环中使用第二个查询(获取子的父名称)并将数据整体合并来实现。但是可以用一个查询来做到这一点吗?

3 个答案:

答案 0 :(得分:6)

自行加入表格,使用parent列链接到父级的cat_id。

SELECT c1.cat_id as childID, c1.cat_name ChildName, c2.cat_name as ParentName
from category c1
LEFT OUTER JOIN category c2
ON c1.parent = c2.cat_id
  • 注意:由于某些元素没有父元素(NULL),因此我放置了LEFT OUTER JOIN,以便显示这些行。如果你不想要 ,使用JOIN代替LEFT OUTER JOIN
  • 你也可以显示线条,但显示其他内容(空或者 使用NULL
  • ,而不是COALESCE
  • 您可以将结果视为一个(大)新表,因此您可以像往常一样添加WHERE子句,例如过滤父名称:WHERE c2.cat_name = 'test2'

答案 1 :(得分:0)

Select p.cat_id, p.cat_name, c.cat_id, c.cat_name, c.parent 
From category Left Join category On p.cat_id = c.parent 
Where p.cat_name = 'name'

答案 2 :(得分:0)

SELECT c1。category_name AS类别,c2。 category_name AS sub_category FROM(

SELECT * 来自category )AS c1 INNER JOIN(

SELECT * 来自category )AS c2 ON c1。category_id = c2。category_id