MySql select 查询相同的 table 子类别父类别和子类别
MySql select query for same table category and subcategory parent under child
这个问题已经问过了,但没有解决我的问题。
我在 table 下面给出了一个 table 名称 categories
,这里 parent
和 child
插入了相同的 table。我想获取父级下的所有子类别。
我的table:
categoryId categoryName categorytype parentCategoryId status
1 cars 0 0 1
2 honda city 1 1 1
3 Medical 0 0 1
4 Cancer 1 4 1
5 bmw 1 1 1
所以我想像这样获取数据输出:
categoryId categoryName parentCategoryId
1 cars 0
2 honda city 1
5 bmw 1
3 Medical 0
4 Cancer 4
我想做的是 car
是一个 parent
在此下面将列出所有汽车名称。
这是我试过的查询:
SELECT * FROM categories c1 left join categories c2 on c2.categoryId = c1.parentCategoryId;
这个可以用
SELECT c1.*
FROM categories c1
LEFT JOIN categories c2 on c2.categoryId = c1.parentCategoryId
ORDER BY COALESCE(c2.categoryId, c1.categoryId), c1.categoryId
编辑
如果根类别是固定的0
,不用JOIN
可以更简单
SELECT *
FROM categories
ORDER BY CASE WHEN parentCategoryId = 0 THEN categoryId ELSE parentCategoryId END, categoryId
这个问题已经问过了,但没有解决我的问题。
我在 table 下面给出了一个 table 名称 categories
,这里 parent
和 child
插入了相同的 table。我想获取父级下的所有子类别。
我的table:
categoryId categoryName categorytype parentCategoryId status
1 cars 0 0 1
2 honda city 1 1 1
3 Medical 0 0 1
4 Cancer 1 4 1
5 bmw 1 1 1
所以我想像这样获取数据输出:
categoryId categoryName parentCategoryId
1 cars 0
2 honda city 1
5 bmw 1
3 Medical 0
4 Cancer 4
我想做的是 car
是一个 parent
在此下面将列出所有汽车名称。
这是我试过的查询:
SELECT * FROM categories c1 left join categories c2 on c2.categoryId = c1.parentCategoryId;
这个可以用
SELECT c1.*
FROM categories c1
LEFT JOIN categories c2 on c2.categoryId = c1.parentCategoryId
ORDER BY COALESCE(c2.categoryId, c1.categoryId), c1.categoryId
编辑
如果根类别是固定的0
,不用JOIN
SELECT *
FROM categories
ORDER BY CASE WHEN parentCategoryId = 0 THEN categoryId ELSE parentCategoryId END, categoryId