子を持つすべてのページを返すにはどうすればよいですか?
だから私は標準的なテーブルを持っています
- 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
ます。
ページの ID のみが必要な場合は、テーブルを自己結合する必要はありません。列parent_idの値を簡単に取得できます。SQL は次のようなものです。
SELECT DISTINCT parent_id
FROM pages
WHERE parent_id IS NOT NULL
thx 構文が完全に正しいかどうかはわかりませんが、次のようにします。
select * from pages where page_id not in
(select page_id from pages where parent_id is not null)