2017-09-17 4 views
1

In MS Access. Ich habe zwei Tische. Ich versuche, alle Datensätze aus der Tabelle 1 zu finden, die keine Übereinstimmung in der Tabelle haben 2.So finden Sie nicht übereinstimmende Datensätze mit mehreren Match-Optionen

Table 1 

DP  FY  BS  RM  EX  
-------------------------------- 
21  1  0107  0 3000 
20  R  0201  6 3960 
12  3  0165  A 1111 


Table 2 

DP  FY  BS  RD  LI 
------------------------------- 
11  4  0300 0  **11 
21  5  0107 7  8**W 
97  7  0819 0  2*** 
21  4  0107 7  2011 

Ich brauche Table1.DP + Table1.FY + Table1.BS + Table1.RM + Table1.EX verketten und finden Sie alle Datensätze in Tabelle1, in denen NO MATCH in Tabelle 2 in den Spalten Table2.DP + Table2.FY + Table2.BS + Table2.RD + Table2.LI vorhanden ist.

Ich brauche auch keine Übereinstimmung auf ein paar Teilstrings von table2.LI, wo sie Sterne enthalten werden (keine Wildcards, tatsächliche Sternchen).

der linken Seite 2 Zeichen von Table2.LI könnte Sternchen, wobei in diesem Fall möchte ich sein, diese Zeile in meinem Ergebnis zurückzukehren,

Die mittleren 2 Zeichen von Table2.LI Sternchen sein könnte, wobei in diesem Fall möchte ich um diese Zeile im Ergebnis zurückzugeben.

Die letzten 3 Zeichen von Table2.LI könnten Sternchen sein, in diesem Fall möchte ich diese Zeile in meinem Ergebnis zurückgeben.

Also, wenn wir die fünf Schlüsselfelder in einem 12-Zeichen-Textfeld mit dem Namen Key verketten waren, möchte ich eine Abfrage, die alle Ergebnisse aus Tabelle 1, wo

Table1.Key <> Table2.Key 
Left(Table1.Key,8) + "**" + Right(Table1.Key,2) <> Table2.Key 
Left(Table1.Key,9) + "**" + Right(Table1.Key,1) <> Table2.Key 
Left(Table1.Key,9) + "***" <> Table2.Key 

Grundsätzlich in diesen Fällen zurück, wo es sind Sterne in diesen Substrings von Table2.LI, ist mir egal, was in Table1.EX in diesen Positionen ist.

Wie kann ich eine SQL-Anweisung schreiben, um mir die Ergebnisse einer UNMATCHED-Abfrage zu geben, wo ich nur Ergebnisse von Tabelle 1 erhalte, wo es keine Übereinstimmung unter diesen Bedingungen in Tabelle 2 gibt? Kann ich die Abfrage schreiben, um die Sternchen im Feld als Platzhalter zum Vergleich zu sehen?

Update: Ich war in der Lage, das Problem zu lösen, indem Sternchen nach dem Erstellen des Schlüsselfelds im Schlüsselfeld durch Fragezeichen ersetzt wurden. Dann machen Sie einen linken Join mit "like" auf der Join-Klausel statt gleich. Jetzt habe ich ein neu entdecktes Problem. Es gibt zwei Bedingungen, bei denen Sternchen im LI-Feld sind, aber ich möchte nicht, dass sie in Fragezeichen umgewandelt werden, weil ich nicht möchte, dass sie als Platzhalter angezeigt werden.

Dies sind die Bedingungen, die ich ändern möchte. Table2.LI =

**XX 
X**X 
X*** 

Dies sind die Bedingungen, die ich will nicht in Platzhalter gedreht werden: Table2.LI =

**** 
X*XX 

(wobei X eine beliebige Zahl oder einen Buchstaben ist).

Ich war in der Lage, die erste aufzulösen, indem Sie einfach eine Where-Klausel hinzufügen, die besagt, wo Table2.LI NICHT ENTHÄLT ("****"). Jetzt versuche ich nur die letzte Bedingung zu lösen. Ich muss das LI-Feld für ein Sternchen nur an der zweiten Position überprüfen und diesen Fall ignorieren.

+0

Was haben Sie versucht? – blueCat

+0

Ich habe einen Weg gefunden, die Sternchen in table2.LI durch Fragezeichen zu ersetzen.Dann sieht Access die Fragezeichen als Wildcards und ich mache einen linken Join am Schlüssel LIKE Schlüssel (anstatt =). wo table2.key ist null. – Nina

+0

Ich werde ein Update hinzufügen. – Nina

Antwort

0

Sie können zuerst Tabellen mit Table_2 und Cross Join mit Table_1 verknüpfen. Bitte versuchen Sie dies:

SELECT [DP]+[FY]+[BS]+[RD]+[LI] T2Key 
into #tmp 
FROM [Table_2] 

select T1.* from [Table_1] T1 
cross join #tmp T2 
WHERE T1.[DP]+T1.[FY]+T1.[BS]+T1.[RM]+T1.[EX] <> T2.T2Key 
and left(T1.[DP]+T1.[FY]+T1.[BS]+T1.[RM]+T1.[EX],8)+'**'+right(T1.[DP]+T1.[FY]+T1.[BS]+T1.[RM]+T1.[EX],2) <> T2.T2Key 
and left(T1.[DP]+T1.[FY]+T1.[BS]+T1.[RM]+T1.[EX],9)+'**'+right(T1.[DP]+T1.[FY]+T1.[BS]+T1.[RM]+T1.[EX],1) <> T2.T2Key 
and left(T1.[DP]+T1.[FY]+T1.[BS]+T1.[RM]+T1.[EX],9)+'***' <> T2.T2Key 
Verwandte Themen