SQLalchemy:在两列上连接一个表

Posted

技术标签:

【中文标题】SQLalchemy:在两列上连接一个表【英文标题】:SQLalchemy: joining one table on two columns 【发布时间】:2015-04-29 13:59:53 【问题描述】:

我必须连接两个表,其中第一个表包含对第二个表的两个崇敬。例如。第一个表拥有 START_ID 和 END_ID 列。第二个表包含职位。如何以可以访问 START 和 END 值的方式加入他们。 这是我尝试过的:

    endp = aliased(POSITIONS)
    startp = aliased(POSITIONS)
    trans_data = self.atomic_db.session.query(ONE, endp, startp
                                              ).join(
        endp,
        ONE.start_id == startp.id).join(source_level,
        ONE.end_id == endp.id).values(
        ONE.id, endp.value ,
        startp.value)

T

【问题讨论】:

问题是什么?它是如何失败的?发生了什么,您预计会发生什么? 【参考方案1】:

你的连接没有正确排序,你应该写:

endp = aliased(POSITIONS)
startp = aliased(POSITIONS)
trans_data = self.atomic_db.session.query(ONE, endp, startp)\
    .join(endp, ONE.end_id == endp.id)\
    .join(startp, ONE.start_id == startp.id)\
    .values(ONE.id, endp.value ,startp.value)

另外,您是要更新还是只获取查询结果?如果是后者 - 你不需要“.values”

【讨论】:

以上是关于SQLalchemy:在两列上连接一个表的主要内容,如果未能解决你的问题,请参考以下文章

在两列上检查唯一性的有效方法?

在两列上创建索引以检查日期是不是介于这两个列之间

在 JOIN 中没有同时在两列上使用杜松子酒

在两列上使用 COUNT 和 GROUP BY 的 SQL 查询非常慢

在两列上创建约束以支持特定规则

模式构建器 laravel 迁移在两列上是唯一的