如何将sql中的查询转换为rails中的查询

Posted

技术标签:

【中文标题】如何将sql中的查询转换为rails中的查询【英文标题】:How to transform query in sql for query in rails 【发布时间】:2021-09-19 07:17:30 【问题描述】:

如何使用左连接转换此查询,并且在 rails 中不存在查询,我使用的是 rails 6.0.3

此查询必须从tableB中收集所有不存在代码且到期日期小于参数传递日期的项目

query_for_delete_codes = "
SELECT expires_at, code FROM tableA
LEFT JOIN tableB ON code = tableB.created_code
WHERE NOT EXISTS(
  SELECT 1 FROM tableB WHERE tableB.created_code = code
)
AND expires_at < '#date_limit'
"

【问题讨论】:

你能用find_by_sql吗? 【参考方案1】:

我不知道你的模型名称,所以我将模型命名为 tableA A 和 tableB B。也许这样的东西对你有用:

class A < ApplicationRecord
  has_many :bs, foreign_key: :created_code, primary_key: 'code'
end

class B < ApplicationRecord
  belongs_to :a, foreign_key: :code, primary_key: 'created_code'
end

A.select(:expires_at, :code)
  .left_joins(:bs)
  .where.not(bs:  created_code: code )
  .where('expires_at < ?', date_limit)

【讨论】:

以上是关于如何将sql中的查询转换为rails中的查询的主要内容,如果未能解决你的问题,请参考以下文章

如何将sql查询转换为mongodb查询中的exists

Rails:将复杂的 SQL 查询转换为 Arel 或 ActiveRecord

如何将选择 sql 查询的结果转换为 ms 访问中的新表

如何将以下 linq 查询转换为 SQL 中的 (Having)

将SQL查询转换为具有多对多关系的Rails查询,最佳实践是什么?

如何将 Sql 查询转换为 Linq 及其在 Entity Framework Core 中的 Join() 方法的等价物