【问题标题】:SQL Inner JOIN with querySQL Inner JOIN 与查询
【发布时间】:2013-03-11 19:41:09
【问题描述】:

我正在尝试做这样的事情,但我不确定你是否可以通过内部连接来做到这一点:

SELECT "scores".* 
FROM "scores" 
    INNER JOIN "games" ON "games"."id" = "scores"."games_id" 
WHERE 
    "games"."date" >= '2013-02-11 19:30:11.799227' 
AND "scores".value > 350; 

感谢您的帮助。此外,如果您知道如何编写 ActiveRecord / arel 语句,那么查询也会有所帮助。

我的模型如下所示:

class Score < ActiveRecord::Base
  belongs_to :game
  delegates :date, to: game
end

class Game < ActiveRecord::Base
  has_many :scores, dependent: :destroy
end

【问题讨论】:

  • SQL 语法很好,应该可以正常工作。你测试了吗?
  • “ActiveRecord/arel”语句是什么意思?
  • @DavidW,他正在谈论与 ruby​​ on rails 一起使用的关系代数查询
  • @rs Doh 我。谢谢...对此无能为力,可悲的是:(
  • 请注意,通常最好在 JOIN 子句中放置尽可能多的相关关系 - 根据您的数据库,这可能会在 INNER JOINs 的情况下自动执行(排序)。除其他外,它使LEFT JOINs 清晰。

标签: sql activerecord arel


【解决方案1】:

ActiveRecord 查询如下所示:

some_date = DateTime.parse('2013-02-11 19:30:11.799227')
score = 350
Score.joins(:game).
      where("games.date >= ? AND scores.value > ?", some_date, score)

这假设您的分数模型中有belongs_to :game

【讨论】:

  • 这似乎不起作用,我收到错误 `PG::Error Error: missing FROM-clause entry for table 'games'
  • @trev9065:你有Game 模型吗? Workout 是什么?
  • 抱歉打错了,这是一个游戏模型。
  • @trev9065: 你能把.to_sql 添加到 ActiveRecord 查询的末尾并发布输出吗?您是否运行了创建“游戏”表的迁移?
  • 是的,我确定我有这张桌子,因为我已经在桌子上建立了其他关系,只有这一种方法给了我错误。这是输出:"SELECT \"scores\".* FROM \"scores\" INNER JOIN \"games\" ON \"games\".\"id\" = \"scores\".\"game_id\" WHERE (games.date &gt;= '2013-02-11 21:16:13.824959' AND scores.value &gt; 350)"
猜你喜欢
  • 2017-12-21
  • 1970-01-01
  • 2015-01-10
  • 2010-12-19
  • 2012-11-04
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多