如何返回所有有孩子的頁面?找到所有有父母的頁面
所以我有一個標準表
- 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