MySQLの閉包テーブル（Closure Table）でルートを取得したい


親子関係のあるカテゴリー階層を categories テーブルと、ancestor, descendant, depth
を持つ閉包テーブルで表現しようとしています。  
depth は ancestor と descendant の距離を表していて、ancestor == descendant のとき 0（自分自身）で、子は
1 、孫は 2 です。

この設計で親を持たないルートカテゴリーを取得したいのですが表し方がわかりません。  
言葉で表すなら、depth が 0 のカテゴリーのうち descendant ととして参照されている数が ancestor == descendant
の１つしか無いカテゴリーになると思います。

無理にSQLで抽出せず、アプリケーションからの登録段階で「is_root」のようなカラムを用意してその値で判断する形にも出来ますがそうしたほうが良いのでしょうか？

RDB は MySQL を想定しています。




下記のように、descendant に１つしか現れないカテゴリを取得するのはどうでしょうか。

[code]

    select descendant from 閉包テーブル group by descendant having count(descendant) = 1;
    
[/code]




下記のように、descendant に１つしか現れないカテゴリを取得するのはどうでしょうか。

[code]

    select descendant from 閉包テーブル group by descendant having count(descendant) = 1;
    
[/code]

