【发布时间】:2018-08-21 14:37:05
【问题描述】:
需要澄清左外连接。 我有一个名为 CLub 的模型
class Club < ApplicationRecord
has_many :club_members, dependent: :destroy
end
另一个名为 ClubMember 的模型
class ClubMember < ApplicationRecord
belongs_to :club
end
当我运行类似的查询时
Club.left_outer_joins(:club_members)
它给了我所有来自 lett 表的记录
但是有类似的东西
Club.left_outer_joins(:club_members).where('club_members.is_assigned =?',true)
它只返回那些存在于 ClubMember 中的条目, 我期待它从左表返回 ClubMember 中不存在的条目以及 ClubMember 中状态为 TRUE 的现有条目。 只需将存在于 ClubMemebr 中的条目设为 FALSE 即可。
我有错误的概念或做错了什么?
【问题讨论】:
-
是的。对于右表没有任何记录的记录,左连接从右表返回空值。但是你得到的是 is_assigned = true 的值。您还需要应用它还应该返回 is_assigned = null 的记录的条件。
-
没有带有is_assigned的条目——ClubMember中存在null,is_assigned = null在这里做什么?
-
我不确定 Ruby on Rails。但我认为,这将解决您的问题。 Club.left_outer_joins(:club_members).where("club_members.is_assigned =true OR club_members.is_assigned 为空")
-
是的,它的工作原理,但你能澄清一下这里发生了什么
-
刚刚在下面发布了详细信息。
标签: ruby-on-rails postgresql join