我是SQL炼金术新手,在从联接中获得所需结果时遇到一些问题。 我有以下型号
class QShow(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
starts_on = db.Column(db.Date)
ends_on = db.Column(db.Date)
form_id = db.Column(db.String(50))
class Competition(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(60))
show_id = db.Column(db.Integer,db.ForeignKey('q_show.id'))
show = db.relationship("QShow", backref=db.backref("showa", uselist=False))
class Start(db.Model):
id = db.Column(db.Integer, primary_key=True)
rider_id = db.Column(db.Integer, db.ForeignKey('rider.id'))
rider = db.relationship("Rider", backref=db.backref("riders", uselist=False))
competition_id = db.Column(db.Integer, db.ForeignKey('competition.id'))
competition = db.relationship("Competition", backref=db.backref("competitiona", uselist=False))
show_id = db.Column(db.Integer, db.ForeignKey('q_show.id'))
show = db.relationship("QShow", backref=db.backref("shows",uselist=False))
class Rider(db.Model):
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String(30))
last_name = db.Column(db.String(35))
starts = db.relationship('Start',backref='riderref',lazy='dynamic')
每一场比赛都有多个比赛,每一个比赛都有多个起跑点,一个骑手需要一个起跑点才能参加一个比赛,而且每个比赛都可以有一个以上的起跑。所有这些都是表演的一部分。在
比赛和开始数据很容易查询,因为他们有一个FK的show_id。但是我希望得到所有的车手在一个特定的显示。在
有了这个问题,我得到了所有的车手,不管车展如何。我知道我错过了什么。在
^{pr2}$有人能帮我弄明白这种疯狂吗?在
更新1
我试着加入QShow,这是有意义的,但我仍然收到来自所有节目的车手。在
rider = Rider.query \
.join(Start) \
.join(Competition) \
.join(QShow)\
.filter(QShow.id == show_id)
更新2
在考虑这一点时,我做了一个可行的解决办法,但是我仍然想了解我在《车手秀》一路走来的连接中做错了什么。在
rider = Rider.query \
.join(Start) \
.filter(Start.show_id == show_id)
@univerio是对的。问题是数据库外键不一致。一旦我修复了这个问题,join语句就完美地工作了。在
相关问题 更多 >
编程相关推荐