2016-10-27 1 views
0

Ich kann diese Abfrage ausführen, wenn ich die Tblpet völlig in Ordnung, aber wenn ich die Tblpet die Abfrage ausführen, aber ich bekomme die Ergebnisse dupliated. Also anstatt 5 Ergebnisse hatte ich etwas wie 6300, aber alle die gleichen Ergebnisse geloopt.Pyodbc SQL SELECT Cursor.execute Duplikate Ergebnisse

Dank

EDIT

Ich habe es jetzt dank Mureinik und Siyual für sagen mir fixiert etwa verbindet. Ich fand dann diese

https://msdn.microsoft.com/en-us/library/bb243855(v=office.12).aspx

JOINing mdb tables with pyodbc

Es 50% gearbeitet bu dann hatte ich eine großartige Idee in den Zugang zu gehen und machen Sie die Abfrage dann auf SQL-Ansicht schalten und kopiert es. Es funktioniert großartig und ich war so so nahe

ANTWORT

Records = Cursor.execute("""SELECT tblcustomer.cust_addr1, tblcustomer.cust_addr2, 
          tblcustomer.cust_postcode, tblcustomer.cust_telno_home, tblcustomer.cust_email 
          FROM tblcustomer INNER JOIN tblpet ON (tblcustomer.cust_no = tblpet.pet_cust_no) 
          WHERE cust_surname = ? and tblpet.pet_deceased = ?""", (SearchCriteria[0],"Y")).fetchall() 
+0

Da dies ein 'CROSS tut VERBINDEN Sie sich. Wenn Sie beabsichtigen, die Tabellen zu "verbinden", verwenden Sie die explizite 'JOIN'-Syntax (verwenden Sie keine Kommas in der' FROM'-Klausel - [ernsthaft, dies wurde 1992 abgelehnt]] (http: //www.contrib.andrew. cmu.edu/~shadow/sql/sql1992.txt)) und zeigen, wie die Tabellen in der ON-Klausel stehen. – Siyual

+0

danke - Frage aktualisiert –

Antwort

1

Wenn Sie eine implizite schreiben beitreten, wie Sie hier haben (dh mehr als eine Tabelle in der from-Klausel), die Datenbank erstellt ein kartesisches Produkt der Zeilen. Sie müssen eine Bedingung hinzufügen, damit nur die entsprechenden Zeilen übereinstimmen. Zum Beispiel hat der Kunde unter der Annahme, eine ID und das Tier hat die ID des Kunden:

SELECT cust_addr1, cust_addr2, cust_postcode, cust_telno_home, cust_email 
FROM tblcustomer, tblpet 
WHERE tblcustomer.id = tblpet.customer_id AND -- Here! 
     cust_surname = ? AND 
     tblpet.pet_deceased = ? 

Oder noch besser, können Sie die explizite join Syntax:

SELECT cust_addr1, cust_addr2, cust_postcode, cust_telno_home, cust_email 
FROM tblcustomer 
JOIN tblpet ON tblcustomer.id = tblpet.customer_id -- Here! 
WHERE cust_surname = ? AND 
     tblpet.pet_deceased = ? 
+0

Frage aktualisiert –

Verwandte Themen