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

これはどうですか?0の行をクエリcategoryして取得し、その親レコードを参照する各行を検索します。idparent

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 に答える
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 に答える