2013-04-06 52 views
2

我有表結構如下圖所示:父/子在同一個表

id |parent|name |value 
1 | 0 | aaa | 
2 | 0 | bbb | 
3 | 0 | ccc | 
4 | 1 |  | 111 
5 | 1 |  | 222 
6 | 3 |  | 333 

我想顯示父,如果它有子記錄。

像:

(父ID +姓名+值的第一個孩子)

1 - aaa - 111 
3 - ccc - 333 
+1

這個問題沒有顯示任何研究工作。 **做你的作業很重要**。告訴我們你發現了什麼,***爲什麼它不符合你的需求。這表明你已經花時間去嘗試幫助你自己了,它使我們避免重申明顯的答案,最重要的是它可以幫助你得到更具體和相關的答案。 [FAQ](http://stackoverflow.com/questions/how-to-ask)。 – Kermit 2013-04-06 17:46:50

回答

1

沒有在數據庫中的第一個孩子的意思,你可以通過的的的最小值獲得的第一個孩子id或該值的最小值,但這些值不是以表格中的特定順序存儲的,因此您無法確定哪個值是第一個值。

但是,假設id是自動增量列,那麼第一個孩子的價值是最小id的值,那麼你可以這樣做:

SELECT 
    t1.parent, 
    t2.name, 
    t1.value 
FROM tablename AS t1 
INNER JOIN 
(
    SELECT MIN(id) AS id, parent 
    FROM tablename 
    GROUP BY parent 
) AS t22 ON t22.id = t1.id AND t1.parent = t22.parent 
INNER JOIN tablename AS t2 ON t1.parent = t2.id; 

看到它在這裏的行動:

這會給你:

| PARENT | NAME | VALUE | 
------------------------- 
|  1 | aaa | 111 | 
|  3 | ccc | 333 | 

或者:

SELECT 
    t1.parent, 
    t2.name, 
    MIN(t1.value) AS value 
FROM tablename AS t1 
INNER JOIN tablename AS t2 ON t1.parent = t2.id 
GROUP BY t1.parent, t2.name; 

看到它在行動:

您可以通過最小值得到它這會給你:

| PARENT | NAME | VALUE | 
------------------------- 
|  1 | aaa | 111 | 
|  3 | ccc | 333 | 
相關問題