我在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查询来实现这一目标?
答案 0 :(得分:3)
请检查..它会工作
SELECT id, name, parent
FROM category
WHERE id NOT
IN ( SELECT parent FROM category )
答案 1 :(得分:1)
怎么样?它将查询category
并获取id
为0的行的parent
,然后找到引用该父记录的每一行。
select * from category as t1 where t1.parent in (select t2.id from category as t2 where t2.parent=0)
答案 2 :(得分: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