Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何包括正在搜索的具有空关联的记录?_Sql_Ruby On Rails_Postgresql_Activerecord - Fatal编程技术网

Sql 如何包括正在搜索的具有空关联的记录?

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

我有3个模型-患者、用户、护理者:

  • 患者和护理者
    有一个
    用户(存储名称、电子邮件等)
  • 医务人员
    属于
    患者,患者
    有许多
    医务人员
  • 有些患者没有护理人员
我正在尝试更新搜索查询,以允许我们搜索医务人员的用户属性。问题是,此搜索查询会抛出任何没有医务人员的患者,这是不需要的。以下是搜索方法:

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”是空的
我会再多看一些。谢谢你的建议!