【发布时间】:2018-06-05 01:11:59
【问题描述】:
我对 Sequel 还是很陌生,我正在摸索着想弄清楚如何让 Sequel 的 API 生成以下琐碎的 SQL:
select f.* from first f
join second s on f.second_id = s.id
where s.deactivated = false
我能想到的最好的方法是:
First.join(:second, deactivated: false, id: :second_id)
.paged_each do |first|
# magic happens here
end
但这确实是select * 而不是select first.*,因此对id 用于分页和抛出PG::AmbiguousColumn: ERROR: ORDER BY "id" is ambiguous 的命令感到困惑
这是使用 Sequel 5.9.0 和 Postres 10。
解决方案
感谢@engineersmnky 对qualify 的建议以及一些进一步阅读,这是我最终使用的方法。
First.join(:second, id: :second_id, deactivated: false)
.qualify
.stream.each do |first|
# magic happens here
end
qualify 方法调用解决了歧义(并确保只返回第一个表。
我还添加了sequel_pg gem,所以我可以使用stream.each 而不是paged_each。这具有更好的性能,但也消除了对 order by id 的需求,这让我最初感到悲伤。
【问题讨论】: