SqlAlchemy:加入两个不等于条件的表

问题描述 投票:0回答:1

我有两张表(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()

但是,上面的任何一个查询都返回了Loan_Contract的所有记录,即使LoanID中存在Loan_Amend

如上所述,将结果归档的正确方法是什么?谢谢。

python-2.7 sqlalchemy
1个回答
2
投票

要获得所有没有任何引用它的Loan_ContractLoan_Amend行,您需要使用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))
© www.soinside.com 2019 - 2024. All rights reserved.