[我觉得这也许/肯定(?)不过,一个复制品,我已经找了一整天来找到这个问题的解决方案,但似乎我无法让它按照我想要的方式工作。]
在MySQL中,我有三个表,分别命名为ecordov(A)、ecordovadr(B)和ecrgposvk(C)。 我有一个键连接所有这些;在(A)每个键有一行,(B)和(C)每个键可能有多行,所以,如果不是这些问题的专家,我认为这是一对多的关系。在
我阅读了SQLAlchemy文档,并将我的表设置为:
class Ecordov(Base):
__tablename__ = 'ecordov'
oovkey = Column(BIGINT, primary_key=True)
oovorder = Column(BIGINT)
ecordovadr = relationship('Ecordovadr')
ecrgposvk = relationship('Ecrgposvk')
class Ecordovadr(Base):
__tablename__ = 'ecordovadr'
ooakey = Column(BIGINT, primary_key=True)
ooaname1 = Column(VARCHAR)
ooaorder = Column(BIGINT, ForeignKey('ecordov.oovorder'))
class Ecrgposvk(Base):
__tablename__ = 'ecrgposvk'
rgkey = Column(BIGINT, primary_key=True)
rgposvalue = Column(DOUBLE)
rgposordnum = Column(BIGINT, ForeignKey('ecordov.oovorder'))
[所以,正如您所见,ForeignKeys
不是{
我的示例查询如下:
^{pr2}$计算结果为:
SELECT ecordov.oovkey AS ecordov_oovkey, ecordov.oovorder AS ecordov_oovorder, group_concat(ecordovadr.ooaname1 ORDER BY ecordovadr.ooatype, ecordovadr.ooarank separator "{}") AS ooaname1
FROM ecordov LEFT OUTER JOIN ecordovadr ON ecordov.oovorder = ecordovadr.ooaorder
WHERE ecordov.oovorder LIKE '75289'
GROUP BY ecordov.oovorder
给我的是:
for x in jobs:
x.ooaname1
u'Sorbe priv.{}Lebensn\xe4he GmbH'
这是我想要的结果。在
但是,在连接第二个表之后,不管使用的是内部连接还是外部连接,例如:
jobs = session.query(Ecordov, func.group_concat(Ecordovadr.ooaname1.op('ORDER BY')(text('ecordovadr.ooatype, ecordovadr.ooarank separator "{}"'))).label('ooaname1')).outerjoin(Ecordovadr).outerjoin(Ecrgposvk).filter(Ecordov.oovorder.like('75289')).group_by(Ecordov.oovorder)
其计算结果为:
SELECT ecordov.oovkey AS ecordov_oovkey, ecordov.oovorder AS ecordov_oovorder, group_concat(ecordovadr.ooaname1 ORDER BY ecordovadr.ooatype, ecordovadr.ooarank separator "{}") AS ooaname1
FROM ecordov LEFT OUTER JOIN ecordovadr ON ecordov.oovorder = ecordovadr.ooaorder LEFT OUTER JOIN ecrgposvk ON ecordov.oovorder = ecrgposvk.rgposordnum
WHERE ecordov.oovorder LIKE '75289'
GROUP BY ecordov.oovorder
给我:
for x in jobs:
x.ooaname1
u'Sorbe priv.{}Sorbe priv.{}Sorbe priv.{}Lebensn\xe4he GmbH{}Lebensn\xe4he GmbH{}Lebensn\xe4he GmbH'
所以,数据现在增加了三倍。我在其他关于这个主题的线程中读到,这是意料之中的,特别是当对多个表使用相同的ForeignKey
时。在
但我需要“像以前一样”的数据,这意味着只有一个条目,而不是三个条目。我尝试过使用distinct(),但到目前为止没有成功。在
有人能给我指一个方向吗?怎么解决这个问题?在
提前谢谢,祝你一切顺利!在
目前没有回答
相关问题 更多 >
编程相关推荐