2015-07-10 75 views
0

昨天我詢問this question關於僅選擇孫子條目。我花了一段時間,但我終於想出瞭如何做我想做的事情。現在,我需要做一些其他的事情:只選擇祖父項(通過「祖父母」,我的意思是沒有父母的人,即他們的parent_id是0),但只有那些有孫子,無論他們是否有孩子。SQL查詢僅選擇具有孫子的條目

這是我的表:

+-----+-------------+-----------+ 
| id | name  | parent_id | 
+-----+------------+-----------+ 
| 1 | Bob  | 3   | 
| 2 | John  | 5   | 
| 3 | Larry  | 4   | 
| 4 | Kevin  | 0   | 
| 5 | Kyle  | 0   | 
| 6 | Jason  | 5   | 
| 7 | Mildred | 4   | 
| 8 | Mabel  | 6   | 
| 9 | Amber  | 4   | 
| 10 | Devon  | 5   | 
| 11 | Zack  | 0   | 
| 12 | Alfred  | 11  | 
| 13 | Robert  | 11  | 
| 14 | Keith  | 11  | 
| 15 | David  | 0   | 
| 16 | Wilbur  | 15  | 
+-----+------------+-----------+ 

這是我想要回結果:

+---------+ 
| name | 
+---------+ 
| Kevin | 
| Kyle | 
+---------+ 

只有那些三位家長。結果我不要大衛或扎克,因爲他們沒有孫子。

爲了讓所有的祖父母,我可以簡單地這樣做:

SELECT name FROM people WHERE parent_id = 0 

但我需要一個查詢,只能選擇具有零父ID和祖父母都是條目。

http://sqlfiddle.com/#!9/b1a818/3

+0

'Zack'也沒有孫子。 –

+0

哦,你說得對。謝謝。我會更新我的問題@GiorgosBetsos – eshellborn

+0

您還需要編輯此部分:*但我需要一個查詢,可以選擇沒有孫子的條目。* –

回答

1

我想你需要一個雙自JOIN從而達到孫子級別:

SELECT DISTINCT p1.name 
FROM people AS p1 
INNER JOIN people AS p2 ON p1.id = p2.parent_id 
INNER JOIN people AS p3 ON p2.id = p3.parent_id 
WHERE p1.parent_id = 0 

INNER JOIN旨意篩選出沒有達到兩個層次下來的任何記錄父子層次結構。

Demo here

+0

是的!謝謝。我正在玩這兩個連接,我非常接近...但我無法完全理解它 – eshellborn