Rails 3:Arel如何处理NOT EXISTS?

9

如何在Arel中编写NOT EXISTS?我在将此查询翻译为Arel时遇到了麻烦:

SELECT * FROM deals 
WHERE NOT EXISTS (
   SELECT 1 FROM reward_deals 
   WHERE reward_deals.deal_id = deal.id 
   AND NOT (
      reward_deals.awarding_type = 'deal' 
      AND reward_deals.deal_id = reward_deals.awarding_id
   )
 )
1个回答

19

这是答案,名称很奇怪,因为我不知道如何为我未知的域名命名。

deals = Deal.arel_table
reward_deals = RewardDeal.arel_table
awarding_condition= reward_deals[:awarding_type].eq('deal')\
                                .and(reward_deals[:deal_id]\
                                       .eq(reward_deals[:awarding_id]))

reward_deals_condition= reward_deals[:deal_id].eq(deals[:id])\
                              .and(awarding_condition.not)
Deal.where(RewardDeal.where(reward_deals_condition).exists.not)

然而,我的答案回答了你的问题,我的推测也是正确的。为什么你没有将我的答案标记为正确呢?! - Pedro Rolo
必须自己尝试一下才能确定这是正确的答案。看起来这个方法很有效。谢谢! - neezer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接