【问题标题】:SqlAlchemy: Join Two Tables With Not Equal ConditionSqlAlchemy:连接两个不相等条件的表
【发布时间】:2018-06-09 06:14:59
【问题描述】:

我有两个表(Loan_ContractLoan_Amend)具有相同的列 LoanID。我的目的是我想从表 Loan_Contract 中获取所有数据,前提是它们不存在于表 Loan_Amend 中。

所以我尝试了如下查询:

db.session.query(
                Loan_Contract.ID,
                Loan_Contract.Currency,
                Loan_Contract.DisbursedAmount
            ).\
            join(Loan_Amend,Loan_Amend.LoanID != Loan_Contract.ID).\
            all()

db.session.query(
                Loan_Contract.ID,
                Loan_Contract.Currency,
                Loan_Contract.DisbursedAmount
            ).\
            join(Loan_Amend,Loan_Amend.LoanID == Loan_Contract.ID).\
            filter(Loan_Contract.ID != Loan_Amend.LoanID).\
            all()

但是,即使LoanID 存在于Loan_Amend 中,上述任一查询都返回了来自Loan_Contract 的所有记录。

按照上述目的存档结果的正确方法是什么?谢谢。

【问题讨论】:

    标签: python-2.7 sqlalchemy


    【解决方案1】:

    要获取没有任何Loan_Amend 引用的所有Loan_Contract 行,您需要使用LEFT JOIN

    SELECT * FROM Loan_Contract LEFT JOIN Loan_Amend ON Loan_Contract.ID = Loan_Amend.LoanID
    WHERE Loan_Amend.LoanID IS NULL;
    

    使用 SQLAlchemy:

    session.query(Loan_Contract) \
           .outerjoin(Loan_Amend, Loan_Contract.ID == Loan_Amend.LoanID) \
           .filter(Loan_Amend.LoanID.is_(None))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 2015-01-13
      • 2017-06-29
      • 2017-01-23
      • 1970-01-01
      相关资源
      最近更新 更多