我在通过 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)