我正在使用 Ruby on Rails 2.3.5 从我的 SQLite 数据库中接收一组模型。目前我正在使用子查询来选择我真正想要的那些:
find(:all,
:conditions => "foo.id in (
SELECT bar.foo_id FROM bar
JOIN baz
ON baz.bar_id = bar.id
WHERE baz.bla in (1, 2, 3)
)"
)
我知道这很愚蠢,因为子查询为每一行评估相同的结果,我猜 SQLite 不够聪明,无法注意到它可以被优化。所以我想把它从查询中删除。我知道我可以简单地使用第二个从 Rails 调用它find()
,但是考虑到子查询的返回值可能会变得比较大,我想在数据库中做所有事情,所以我不需要在数据库和 Rails。
那么,我该如何做模型find()
并告诉它,它应该查找我的实际子查询的返回值,然后使用它的结果来比较我的其他行?我可以通过一次调用将其传递给find()
SQLite 吗?