2017-12-28 28 views
0

同じ列のLoanIDを持つ2つのテーブル(Loan_ContractLoan_Amend)があります。私の目的は、テーブルLoan_Amendに存在しない場合にのみテーブルLoan_Contractからすべてのデータを取得したいということです。SqlAlchemy:等しくない条件で2つのテーブルを結合する

は、だから私は以下のように私のクエリを試してみました:

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() 

をただし、クエリのいずれかは、上記のLoanIDLoan_Amendに存在していてもLoan_Contractからすべてのレコードを返されました。

上記の目的に沿って結果をアーカイブする正しい方法は何ですか?ありがとう。

答えて

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)) 
+0

をおかげで非常に多く、それが正常に働いて:) –

関連する問題