2013-03-09 106 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