0
同じ列の2つの列を結合することを含むクエリを実行しようとしています。SQL Alchemy Strange behavior同じテーブルの複数の列を結合する
これらは私のモデルです:
class Match(Base):
__tablename__ = 'matches'
id = Column(Integer, primary_key=True)
date = Column(Date, nullable=False)
time = Column(Time, nullable=True)
league_id = Column(ForeignKey('leagues.id'), nullable=False, index=True)
league = relationship('League', backref='matches')
type = Column(enums.matches_types)
home_id = Column(ForeignKey('teams.id'), nullable=False, index=True)
home = relationship('Team', foreign_keys=[home_id], backref='home_matches')
away_id = Column(ForeignKey('teams.id'), nullable=False, index=True)
away = relationship('Team', foreign_keys=[away_id], backref='away_matches')
class Team(Base):
__tablename__ = 'teams'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
country_id = Column(ForeignKey('countries.id'), nullable=False, index=True)
country = relationship('Country', backref='teams')
これは私がSQLAlchemyの中で書いたものです:SQLAlchemyのは、純粋なSQLを行い
self.db_match = Session.query(Match).join(home, Match.home).options(contains_eager(Match.home)
).join(away, Match.away).options(contains_eager(Match.away)
).join(Match.b_reference).options(contains_eager(Match.b_reference)
).filter(home.name == self.match['home']['name']
).filter(away.name == self.match['away']['name']
).filter(Match.date == self.match['date'])
翻訳は以下の通りです:
SELECT teams_1.name, teams_2.name, matches.id, matches_b_reference_codes.code
FROM teams, matches JOIN teams AS teams_1 ON teams_1.id = matches.home_id
JOIN teams AS teams_2 ON teams_2.id = matches.away_id
JOIN matches_b_reference_codes ON matches.id = matches_b_reference_codes.match_id
WHERE teams_1.name = 'Portland Trail Blazers' AND teams_2.name = 'Miami Heat' AND matches.date = '2011-01-09';
しかしこれが私の必要なものです:
SELECT teams_1.name, teams_2.name, matches.id, matches_b_reference_codes.code
**FROM matches JOIN teams AS teams_1 ON teams_1.id = matches.home_id**
JOIN teams AS teams_2 ON teams_2.id = matches.away_id
JOIN matches_b_reference_codes ON matches.id = matches_b_reference_codes.match_id
WHERE teams_1.name = 'Portland Trail Blazers' AND teams_2.name = 'Miami Heat' AND matches.date = '2011-01-09';
「ホーム」とは何ですか、離れているのですか? 'Match.home'と' Match.away'は何ですか? – univerio
申し訳ありません。モデルにエラーがあります。私はそれを訂正した。 – FranGoitia