2013-03-09 109 views
0

如何返回所有有孩子的頁面?找到所有有父母的頁面

所以我有一個標準表

  • pages.page_id
  • pages.parent_id

所以我希望做這樣的事情:

SELECT * FROM pages p 
WHERE COUNT(SELECT * FROM pages p2 WHERE p2.page_id = p.parent_id) < 0 
+0

計數永遠不會爲負。 – 2013-03-09 13:40:51

回答

2

這可以只需使用JOIN即可解決。在SELECT聲明中使用了DISTINCT關鍵字,以便結果列表是唯一的。

SELECT DISTINCT a.* 
FROM pages a 
     INNER JOIN pages b 
      ON a.page_id = b.parent_id 
+1

+1,乾淨準確。 – Perception 2013-03-09 13:54:57

1

你可以得到帶有孩子的所有頁面的列表如下:

select distinct(parent_id) from pages; 

然後,您可以使用這些父ID來獲取父頁面:

select * from pages, 
      (select distinct(parent_id) as parent from pages) as parents 
    where pages.page_id = parents.parent; 
0

不知道如果thx語法是完全正確的,但我會這樣做:

select * from pages where page_id not in 
(select page_id from pages where parent_id is not null) 
1

發現有孩子指着他們的網頁:

SELECT * 
FROM pages p 
WHERE EXISTS(
    SELECT * 
    FROM pages xx WHERE xx.parent_id = p.page_id 
); 

要查找的網頁沒有任何改變孩子對EXISTSNOT EXISTS

0

如果您只需要頁面的ID,則不需要自行加入表格。您可以簡單地檢索parent_id列的值。 SQL類似於:

SELECT DISTINCT parent_id 
FROM pages 
WHERE parent_id IS NOT NULL