Rails 在带有连接的 where 子句中运行 AND 查询

Posted

技术标签:

【中文标题】Rails 在带有连接的 where 子句中运行 AND 查询【英文标题】:Rails run AND query in where clause with joins 【发布时间】:2021-10-24 04:36:00 【问题描述】:

目前我有以下查询

Policy.joins(policy_coverages: :cpt_code).where(policy_coverages:  cpt_codes:  code: code_array  )

此查询返回所有策略覆盖范围包含数组中的 cpt_code 之一。它正在执行OR 查询。

我如何编写一个查询,它只返回包含 policy_coverages 的策略以及数组 code_array 中的所有 cpt_codes

【问题讨论】:

【参考方案1】:

对记录进行分组并使用必须对每个组(每个策略)设置条件:

Policy.group(:id)
      .joins(policy_coverages: :cpt_code)
      .where(policy_coverages:  cpt_codes:  code: code_array  )
      .having(CptCode.arel_table[Arel.star].count.gteq(code_array.length))

如果您想匹配仅包含这些政策代码而不包含其他代码的记录,请使用 .eq 而不是 .gteq

【讨论】:

max - 它给了我一个语法错误mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) >= 1 LIMIT 11' at line 1 使用CptCode.arel_table[:id] 能解决问题吗?我没有安装 MySQL,但我知道 sqlite 也不喜欢 COUNT(tablename.*) 是的,这确实解决了这个问题。谢谢马克斯

以上是关于Rails 在带有连接的 where 子句中运行 AND 查询的主要内容,如果未能解决你的问题,请参考以下文章

2 带有 WHERE 子句的表连接

带有两个不同 where 子句的内/左连接

如何在rails中添加条件where子句

带有 WHERE 子句的 MySql 内部连接 ​​[关闭]

如何使用带有 PySpark 的 WHERE 子句在 AWS Glue 中查询 JDBC 数据库?

如何使用带有过滤器 where 子句的 oracle 外连接