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

Imr*_*l.H 2 mysql

我有一个名为"category"的mysql表.基本结构看起来像这样 -

------     --------     ------
cat_id     cat_name     parent
------     --------     ------
1          test1        NULL
2          test2        NULL
3          test3        2
4          test4        1
5          test5        3
Run Code Online (Sandbox Code Playgroud)

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

Kon*_*rak 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
Run Code Online (Sandbox Code Playgroud)
  • 要小心:因为有些元素没有parent(NULL),LEFT OUTER JOIN所以我放了一个,所以这些行也会被显示出来.如果您不想这样,请使用JOIN而不是LEFT OUTER JOIN.
  • 您还可以显示线条,但显示其他内容(空或文本或...)而不是NULL使用COALESCE.
  • 您可以将结果视为一个(大)新表,因此您可以像往常一样添加WHERE子句,例如过滤父名称: WHERE c2.cat_name = 'test2'