我有三张桌子Contact,Non Medical Needs和Medical Needs。联系has_many非医疗和医疗需求。
需求有一个fulfilled布尔列,它将需求标记为已完成。我需要查询所有有任何未满足的医疗或非医疗需求的联系人。
我尝试过使用或关系进行查询,但它只返回需求的交集。下面是我想出的查询
Contact.joins(:non_medical_reqs, :medicaL_reqs)
.where(non_medical_reqs: {fullfilled: nil})
.or(Contact.joins(:non_medical_reqs, :medicaL_reqs)
.where(medical_reqs: {fullfilled: nil}))编辑我在Rails 6中使用Postgresql
发布于 2020-04-04 12:13:27
这可能行得通。我在一个项目中的类似关系上尝试了它,它似乎起作用了。使用or,我只能让它与where子句的结构稍有不同。
Contact.left_joins(:non_medical_reqs, :medicaL_reqs).where('non_medical_reqs.fullfilled = ?', nil).or(Contact.left_joins(:non_medical_reqs, :medicaL_reqs).where('medical_reqs.fullfilled = ?', nil}))为了检查这一点,我将提取以下查询并比较结果:
Contact.left_joins(:non_medical_reqs).where('non_medical_reqs.fullfilled = ?', nil)和
Contact.left_joins(:medicaL_reqs).where('medical_reqs.fullfilled = ?', nil})并确保两个集合与第一个查询的结果相等。
https://stackoverflow.com/questions/61023332
复制相似问题