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 查询的主要内容,如果未能解决你的问题,请参考以下文章
带有 WHERE 子句的 MySql 内部连接 [关闭]