2017-12-28 7 views
0

Ich zwei Tabellen (Loan_Contract und Loan_Amend), die dieselbe Spalte haben LoanID. Mein Zweck ist, dass ich alle Daten aus der Tabelle Loan_Contract nur dann erhalten möchte, wenn sie in der Tabelle Loan_Amend nicht vorhanden sind.SqlAlchemy: Verbinden Sie zwei Tabellen mit ungleicher Bedingung

Also ich meine Frage, wie unten versucht:

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

Und

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

jedoch entweder der Abfrage zurückgegeben werden vor allem Datensatz aus Loan_Contract obwohl LoanID in Loan_Amend existieren.

Was ist der richtige Weg, um das Ergebnis wie erwartet über den Zweck zu archivieren? Vielen Dank.

Antwort

1

Um alle Loan_Contract Reihen zu erhalten, die nicht Loan_Amend darauf zu verweisen haben, müssen Sie ein verwenden LEFT JOIN:

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

SQLAlchemy Verwendung:

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

Vielen Dank, es funktioniert gut :) –

Verwandte Themen