我在重写SQL查询并将其转换为ActiveRecord
查询时遇到了一些困难。
假设我有一个表resources
,它提供了id
标识的资源列表(并包含其他属性)。
假设我还有一个表reservation_slots
,它将这些资源上的预订列为一小时广告位,其中包含以下属性:id
,start_datetime
,reservation_id
和{{ 1}}(引用resource_id
)。对资源的多小时预留将在此表中包含多行。
我想检索所有“不可用”时隙的列表:resources.id
其中所有资源(在start_datetimes
表中)都已保留。我可以使用以下SQL检索这样的列表:
resources
是否有更简单或更有效的方式来表达此查询?如何在where子句中没有大量原始SQL的情况下将其写为select start_datetime
from reservation_slots
where not exists (
select r.id
from resources r
where r.id not in (
select resource_id
from reservation_slots rs
where rs.start_datetime = reservation_slots.start_datetime
)
)
查询?