Mysql 活动记录查询:联接和:包含之间的冲突
有人能为下面的问题提供一个简单的解决方案吗Mysql 活动记录查询:联接和:包含之间的冲突,mysql,ruby-on-rails,Mysql,Ruby On Rails,有人能为下面的问题提供一个简单的解决方案吗 Workout.all(:joins => [:person, :schedule], :conditions => ["schedule.id = ? AND people.gym_id = ?", schedule.id, gym.id ], :order => "time DESC", :include => [:person]), 错误消息说:Mysql::错误:不是
Workout.all(:joins => [:person, :schedule],
:conditions => ["schedule.id = ? AND people.gym_id = ?", schedule.id, gym.id ],
:order => "time DESC",
:include => [:person]),
错误消息说:Mysql::错误:不是唯一的表/别名:'people':然后是一个很长的sql查询
当我从:include选项中删除:person时,代码工作正常。然而,接下来我遇到了“n+1查询”问题:当我显示训练时,它会为每个人生成一个单独的查询
我假设来自连接和包含选项的“人员”表在生成的SQL中发生冲突。是否有方法使用“查找”选项为具有活动记录的表别名?或者我是否需要为:joins选项使用sql片段,以便将表别名为AS
我尚未将此应用升级到3.0,因此无法使用“Class.joins().where()”语法。您可以从连接中删除:person并将其保留在include中,您可以在:select选项的people表中添加字段,例如
Workout.all(:joins => [:schedule],
:conditions => ["schedule.id = ? AND people.gym_id = ?", schedule.id, gym.id ],
:order => "time DESC",
:select => "workouts.*,people.*"
:include => [:person])
谢谢,这就成功了,尽管我很难理解为什么。将人员放入:include生成一个左侧外部联接,该联接应返回所有训练,而不仅仅是那些有与该人员匹配的人员的训练。健身房id条件,对吗?但它确实有效。