查找拥有父级的所有页面

时间:2013-03-09 13:38:31

标签: mysql sql select

如何归还所有有孩子的网页?

所以我有一个带

的标准表
  • pages.page_id
  • pages.parent_id

所以我想做这样的事情:

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

5 个答案:

答案 0 :(得分:2)

这可以使用JOIN简单地解决。 DISTINCT语句中使用了SELECT关键字,以使结果列表唯一。

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

答案 1 :(得分: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;

答案 2 :(得分:1)

找到有孩子指向他们的页面:

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

要查找没有任何孩子的网页,请将EXISTS更改为NOT EXISTS

答案 3 :(得分:0)

不确定thx语法是否完全正确,但我会这样做:

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

答案 4 :(得分:0)

如果只需要页面的ID,则无需自行加入表格。您只需检索列parent_id的值即可。 SQL类似于:

SELECT DISTINCT parent_id
FROM   pages
WHERE  parent_id IS NOT NULL