Das verwirrt mich sehr und ich konnte keine findenGrund warum: Im Jahr 2010 Access erstelle ich 2 Join-Abfragen. Join 1: 1 Big Table Inner Joins 1 Unterabfrage für mehrere Felder auswählen. Eines der Felder ist Datum aber in Zahlenformat, d. h. 201701 Es werden 100 Datensätze zurückgegeben.
Join 2: Dieselbe große innere Tabelle verbinde dieselben Felder mit einer Tabelle. Das Der einzige Unterschied zu Join 1 besteht darin, dass die zweite Tabelle aus dem erstellt wird Abfrage von oben auswählen. Es werden über 1000 Datensätze zurückgegeben. Dies ist das Ergebnis erwarte ich.
Ich habe verschiedene Ansätze ausprobiert und festgestellt, dass das Datumsfeld verursacht die Angelegenheit. Sobald ich dieses Datumsfeld (RenewalDate) entferne, verbinden beide Abfragen gib das gleiche Ergebnis zurück.
SQL
SELECT POLICY, Date, Val(LEGAL) AS LEGALN, REGION INTO New_Table FROM [TABLE_A] INNER JOIN [FILTER] ON ([TABLE_A].NETWORK = [FILTER].NETWORK) AND ([TABLE_A].LEGAL = [Filter].LEGAL) AND ([TABLE_A].REGION = [Filter].REGION) AND ([TABLE_A].AF = [Filter].AF) AND ([TABLE_A].ML = [Filter].ML) AND ([TABLE_A].ELGIND = [Filter].ELGIND) AND ([TABLE_A].OI = [Filter].OI) AND ([TABLE_A].Policy = [Filter].Policy) AND ([TABLE_A].SEGMENT = [Filter].SEGMENT) AND ([TABLE_A].PRODTYPE = [Filter].PRODTYPE) AND ([TABLE_A].RenewalDATE = [Filter].RenewalDATE) WHERE (([TABLE_A].ASFactor) Is Not Null) AND (([TABLE_A].ProjMed)<>9.9999) AND (([TABLE_A].Proj_R)<>9.9999)
Wenn [Filter] eine Tabelle ist, wird das obige Ergebnis korrekt angezeigt.
Wenn [Filter] eine Auswahlabfrage ist, wird sie erstelltdas falsche Ergebnis. Tabelle_A ist erheblich größer als [Filter]. Im Wesentlichen haben sie Eine Reihe von Feldern, die sich verbinden, werden im Abfrageergebnis nicht angezeigt. Nur Informationen zu Tabelle a werden angezeigt.Kann mir bitte jemand erklären, wie das möglich ist?
Antworten:
0 für die Antwort № 1Ihre DOB-Felder haben möglicherweise nicht genau dieselben Werte, obwohl sie anscheinend dieselben haben.
Fügen Sie anstelle eines Joins einen hinzu Woher Klausel:
Where DateValue(a.DOB) = DateValue(b.DOB)
oder:
Where DateDiff("d", a.DOB, b.DOB) = 0