SQL に基づくリレーショナルデータベース管理システムは、階層型クエリや再帰クエリには部分的にしか適していません。ArangoDBのような他のシステムの方が適しています ( GOTO 2016でこの点について素晴らしい講演がありました)。しかし、共通テーブル式 (CTE)を使用すれば、SQL で再帰クエリを作成することも可能で、例えば、従来の親/子テーブルに対してすべての祖先と子孫をクエリすることができます。
PostgreSQLでは、たとえば次のようになります:
0672c4761d202a35a9059fa137ace7c3
特定のitem_idのすべての子を取得する場合は、共通テーブル式を使用します:
0672c4761d202a35a9059fa137ace7c3
親に問い合わせても問題ありません:
0672c4761d202a35a9059fa137ace7c3