Sql 如何包括正在搜索的具有空关联的记录?
我有3个模型-患者、用户、护理者:Sql 如何包括正在搜索的具有空关联的记录?,sql,ruby-on-rails,postgresql,activerecord,Sql,Ruby On Rails,Postgresql,Activerecord,我有3个模型-患者、用户、护理者: 患者和护理者有一个用户(存储名称、电子邮件等) 医务人员属于患者,患者有许多医务人员 有些患者没有护理人员 我正在尝试更新搜索查询,以允许我们搜索医务人员的用户属性。问题是,此搜索查询会抛出任何没有医务人员的患者,这是不需要的。以下是搜索方法: def self.search(query) joins(:user, care_givers: :user) .where( %(users.first_name ILIKE :query OR
- 患者和护理者
有一个
用户(存储名称、电子邮件等)
- 医务人员
患者,患者属于
医务人员有许多
- 有些患者没有护理人员
def self.search(query)
joins(:user, care_givers: :user)
.where(
%(users.first_name ILIKE :query OR
users.last_name ILIKE :query OR
users.email ILIKE :query OR
CONCAT_WS(' ', users.first_name, users.last_name) ILIKE :query OR
users_care_givers.first_name ILIKE :query OR
users_care_givers.last_name ILIKE :query OR
users_care_givers.email ILIKE :query OR
CONCAT_WS(' ', users_care_givers.first_name, users_care_givers.last_name) ILIKE :query),
query: "%#{query}%"
)
end
我已尝试向上述查询中添加care\u givers.patient\u id为NULL或,但没有效果
患者。包括(:护理者)。其中(护理者:{Patient\u id:nil})
这个查询本身可以抓取没有看护者的患者,那么我如何将它合并到搜索方法中呢
提前谢谢 如果护理者
有一个患者
为什么有护理者。患者id
?,外键应该在患者中。护理者id
,因为它是具有关联的护理者。哇,谢谢你的评论。我错误地描述了这些关系医务人员属于患者,并且患者有很多医务人员,这应该是连接(:用户,护理人员::患者)
?,如果是这样,那么您需要使用左外连接
而不是连接
查看文档以检查如何使用它。基本上,你需要做一个左连接
来“让”那些没有“连接”记录的人通过。我使用的是rails 4,但你说的有道理。查询Patient.includes(:护理者).where(护理者:{Patient\u id:nil})
生成包含左连接的SQL:从“患者”左外部连接“护理者”上的“护理者”。“患者id”=“患者”。“id”和“护理者”。“删除处”在“护理者”处为NULL。“患者id”是空的
我会再多看一些。谢谢你的建议!