如何返回所有有孩子的页面?找到所有有父母的页面
所以我有一个标准表
- pages.page_id
- pages.parent_id
所以我希望做这样的事情:
SELECT * FROM pages p
WHERE COUNT(SELECT * FROM pages p2 WHERE p2.page_id = p.parent_id) < 0
如何返回所有有孩子的页面?找到所有有父母的页面
所以我有一个标准表
所以我希望做这样的事情:
SELECT * FROM pages p
WHERE COUNT(SELECT * FROM pages p2 WHERE p2.page_id = p.parent_id) < 0
这可以只需使用JOIN
即可解决。在SELECT
声明中使用了DISTINCT
关键字,以便结果列表是唯一的。
SELECT DISTINCT a.*
FROM pages a
INNER JOIN pages b
ON a.page_id = b.parent_id
+1,干净准确。 – Perception 2013-03-09 13:54:57
你可以得到带有孩子的所有页面的列表如下:
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;
不知道如果thx语法是完全正确的,但我会这样做:
select * from pages where page_id not in
(select page_id from pages where parent_id is not null)
发现有孩子指着他们的网页:
SELECT *
FROM pages p
WHERE EXISTS(
SELECT *
FROM pages xx WHERE xx.parent_id = p.page_id
);
要查找的网页没有任何改变孩子对EXISTS
NOT EXISTS
。
如果您只需要页面的ID,则不需要自行加入表格。您可以简单地检索parent_id列的值。 SQL类似于:
SELECT DISTINCT parent_id
FROM pages
WHERE parent_id IS NOT NULL
计数永远不会为负。 – 2013-03-09 13:40:51