parent_id 列を介してリンクされた Postgres にツリーを保存しています。子を持たない要素のように、ツリーの葉を見つけたいと思います。これまでのクエリは次のとおりです。
where("id NOT IN ( SELECT parent_id FROM elements WHERE parent_id IS NOT NULL )")
このクエリを記述するより良い方法はありますか? ジョインで処理する方が効率的だと聞いたので、どうにかできないかと考えていたのですが、思いつきませんでした。また、生のSQLなしでこれを行い、代わりにActiveRecordを使用する方法はありますか?
更新: スキーマは次のとおりです。
Column | Type | Modifiers
------------+-----------------------------+--------------------
id | character varying(36) | not null
user_id | character varying(36) | not null
parent_id | character varying(36) |
title | character varying(255) |
created_at | timestamp without time zone | not null
updated_at | timestamp without time zone | not null
Indexes:
"index_elements_on_id" UNIQUE, btree (id)
"index_elements_on_parent_id" btree (parent_id)
"index_elements_on_user_id" btree (user_id)