2

我有一个名为“类别”的 mysql 表。基本结构是这样的——

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

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

4

3 回答 3

7

将表与自身连接,使用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,所以这些行也会显示出来。如果您不希望这样,请使用 aJOIN而不是LEFT OUTER JOIN.
  • 您也可以显示线条,但显示其他内容(空或文本或...)而不是NULL使用COALESCE.
  • 您可以将结果视为一个(大)新表,因此您可以像往常一样添加 WHERE 子句,例如过滤父名称:WHERE c2.cat_name = 'test2'
于 2012-05-03T07:53:02.010 回答
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'
于 2012-05-03T07:54:46.810 回答
-1

选择 c1。category_nameAS 类别,c2。category_name作为子类别 FROM (

SELECT * FROM category ) 作为 c1 内连接 (

SELECT * FROM category ) AS c2 ON c1。category_id= c2。category_id

于 2014-07-15T11:00:26.287 回答