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

ページの ID のみが必要な場合は、テーブルを自己結合する必要はありません。列parent_idの値を簡単に取得できます。SQL は次のようなものです。

SELECT DISTINCT parent_id
FROM   pages
WHERE  parent_id IS NOT NULL
于 2013-03-09T15:21:24.657 に答える
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 に答える