我怎样才能返回所有有孩子的页面?
所以我有一张标准桌子
- pages.page_id
- pages.parent_id
所以我想做这样的事情:
SELECT * FROM pages p
WHERE COUNT(SELECT * FROM pages p2 WHERE p2.page_id = p.parent_id) < 0
这可以简单地使用来解决JOIN
。为了使结果列表唯一,在语句中使用DISTINCT
了关键字。SELECT
SELECT DISTINCT a.*
FROM pages a
INNER JOIN pages b
ON a.page_id = b.parent_id
您可以获得所有具有子页面的列表,如下所示:
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;
找到有孩子指向它们的页面:
SELECT *
FROM pages p
WHERE EXISTS(
SELECT *
FROM pages xx WHERE xx.parent_id = p.page_id
);
要查找没有任何子项的页面,请更改EXISTS
为NOT EXISTS
.
不确定 thx 语法是否完全正确,但我会这样做:
select * from pages where page_id not in
(select page_id from pages where parent_id is not null)
如果您只需要页面的 ID,则无需自连接表。您可以简单地检索列 parent_id 的值。SQL 类似于:
SELECT DISTINCT parent_id
FROM pages
WHERE parent_id IS NOT NULL