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
4

5 回答 5

2

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

SELECT  DISTINCT a.*
FROM    pages a
        INNER JOIN pages b
            ON a.page_id = b.parent_id
于 2013-03-09T13:41:25.433 回答
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;
于 2013-03-09T13:42:04.053 回答
1

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

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

要查找没有任何子项的页面,请更改EXISTSNOT EXISTS.

于 2013-03-09T13:56:00.680 回答
0

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

select * from pages where page_id not in 
(select page_id from pages where parent_id is not null)
于 2013-03-09T13:52:05.857 回答
0

如果您只需要页面的 ID,则无需自连接表。您可以简单地检索列 parent_id 的值。SQL 类似于:

SELECT DISTINCT parent_id
FROM   pages
WHERE  parent_id IS NOT NULL
于 2013-03-09T15:21:24.657 回答