1

我在 MySql 数据库中有一个包含以下数据的类别表。

id  name                      parent
-------------------------------------
1   Web development           0
2   Application development   0
3   Linux                     0
4   Misc                      0
5   Php                       1
6   Mysql                     1
7   Javascript                1
8   CSS                       1
9   C plus plus               2
10  wxWidgets                 2
11  Tutorials                 3
12  My thoughts               4
13  Java                      1
14  JSP                       13
15  Spring                    14
16  Spring 3.0                15
17  Spring 3.1                15
18  JSF                       13
19  Oracle                    0
20  Oracle 8i                 19
21  Oracle 91                 19
22  JSF 2.0                   18
23  JSF 2.2                   18

我需要以下输出。

5   Php                       1
9   C plus plus               2
11  Tutorials                 3
12  My thoughts               4
6   Mysql                     1
7   Javascript                1
8   CSS                       1
10  wxWidgets                 2
22  JSF 2.0                   18
23  JSF 2.2                   18
16  Spring 3.0                15
17  Spring 3.1                15
20  Oracle 8i                 19
21  Oracle 91                 19

结果集应仅包含每个类别的最后一级。这可以使用 MySql 中的函数来完成。但是有没有办法只使用 SQL 查询来实现这一点?

4

3 回答 3

4

请检查它..它会工作

SELECT id, name, parent
FROM category 
WHERE id NOT 
IN ( SELECT parent FROM category ) 
于 2012-10-03T06:50:46.300 回答
1
SELECT 
    c.id,
    dr.ID,
    dr.name,
    dr.Parent
FROM category as c
inner JOIN (SELECT MAX(id) as ID, name , Parent FROM category WHERE parent != '0' GROUP BY parent) as dr ON dr.id = c.id
group by c.id
order by dr.Parent
于 2012-10-03T06:25:13.137 回答
1

这个怎么样?它将查询category并获取idaparent为 0 的行,然后找到引用该父记录的每一行。

select * from category as t1 where t1.parent in (select t2.id from category as t2 where t2.parent=0)
于 2012-10-03T06:15:25.913 回答