如何限制SQL中的FROM
对不起,如果问题的标题没有任何意义,我还是一个初学者,我只是不知道如何解释它 下面是我当前的SQL查询,它运行良好如何限制SQL中的FROM,sql,ruby-on-rails,activerecord,Sql,Ruby On Rails,Activerecord,对不起,如果问题的标题没有任何意义,我还是一个初学者,我只是不知道如何解释它 下面是我当前的SQL查询,它运行良好 select teams.id as team_id, teams.team_name, players.type_name, sum(points) as points from teams inner join gameweeks on teams.id = gameweeks.team_id inner join gameweeks_players on gamew
select teams.id as team_id, teams.team_name, players.type_name, sum(points) as points
from teams
inner join gameweeks on teams.id = gameweeks.team_id
inner join gameweeks_players on gameweeks.id = gameweeks_players.gameweek_id
inner join players on gameweeks_players.player_id = players.id
inner join player_fixtures on players.id = player_fixtures.player_id AND player_fixtures.gw_number = gameweeks.number
group by teams.id, players.type_name
在rails中,我将此查询转换为
Team.joins(gameweeks: :players).
joins("inner join player_fixtures on players.id = player_fixtures.player_id AND player_fixtures.gw_number = gameweeks.number").
group("teams.id, players.type_name").
select("teams.id, teams.team_name, players.type_name as type, sum(points) as points")
在rails中,我有这两个模型
class League < ActiveRecord::Base
belongs_to :user
has_many :league_teams
has_many :teams, :through => :league_teams
end
class Team < ActiveRecord::Base
has_many :gameweeks
has_many :league_teams
has_many :leagues, :through => :league_teams
end
class-League:联盟球队
结束
类团队:联赛球队
结束
我想将我的查询修改为仅与联赛相关联的球队(我想以某种方式传递该联赛的ID)
我只是不知道如何做到这一点,我错过了知识谷歌它与正确的关键字
你能给我指一下正确的方向吗?这本指南应该能给你指一下正确的方向: 我无法测试这是否有效,但您可以尝试以下方法:
League.Team.select("teams.id, teams.team_name, players.type_name as type, sum(points) AS points")
.joins(gameweeks: :players)
.joins("INNER JOIN player_fixtures ON players.id = player_fixtures.player_id AND player_fixtures.gw_number = gameweeks.number")
.where("league.id = ?", leagueId)
.group("teams.id, players.type_name")
编辑:将问题评论中的@gregates答案与我的答案合并。很确定你要找的只是
league.teams.joins(gameweeks::players)。连接(“内部连接玩家上的玩家固定装置。id=玩家固定装置。玩家固定装置。id和玩家固定装置。gw固定装置编号=游戏周。编号”)。组(“teams.id,players.type_name”)。选择(“teams.id,teams.team\u name,players.type\u name作为type,sum(points)作为points”)
@RobertHarvey这对我一点帮助都没有。在任何情况下,该页面都没有谈到通过一个联合表格为example@gregates你的回答也是正确的。谢谢你!有两个小的拼写错误(联盟而不是联盟),但这个答案非常有效@格雷盖茨在评论中的回答也起到了作用。我的回答实际上就是惯用的“rails”方式来做同样的事情。我相信您可以通过一些努力从查询中删除更多的原始sql,使其更加地道(我不是说它一定值得)。@gregates我同意您的建议有一种更好的方法来进行连接。我没有用rails编写任何代码,所以感谢您指出这一点!您的评论中没有任何where条件,这是需要的,所以我合并了解决方案并更新了答案。