Abfrage, die Leerzeichen so behandelt, als hätten sie alle möglichen Werte

Abfrage, die Leerzeichen so behandelt, als hätten sie alle möglichen Werte

Angenommen, ich habe die folgenden Tabellen:

Feld_1 Feld_2 Feld_3
A B D
A C E
A C F
Z B G
Z B H
Z C ICH
Feld_1 Feld_2
A C
Z B

Wenn ich diese in das Abfrageentwurfsfenster in Access ziehe und die beiden Felder mit gemeinsamen Namen verbinde, kann ich problemlos eine Abfrage erstellen, die mir die Datensätze „AC“ und „ZB“ anzeigt (insgesamt vier Datensätze).

Folgendes möchte ich erreichen: Angenommen, in der zweiten Tabelle, im zweiten Datensatz, ist Field_2 Null/Leer. Ich möchte einen Weg finden, dieses Null-Feld zu interpretieren alsallemögliche Werte (unter Berücksichtigung der anderen Verknüpfungen). Wenn ich jetzt den Wert in diesem Feld lösche und dieselbe Abfrage ausführe, sehe ich offensichtlich nur die „A“-Datensätze. Wenn ich daraus in eine der beiden Richtungen einen äußeren Join mache, erhalte ich vorhersehbar nicht das gewünschte Ergebnis.

Eine andere Möglichkeit, darüber nachzudenken, ist, dass ich möchte, dass es eher wie ein Filter mit „und“- und „oder“-Logik funktioniert. Ist das in Access möglich/einfach zu machen? Wäre es besser, dies mit einem erweiterten Filter in Excel zu versuchen?

Dieses Beispiel ist offensichtlich vereinfacht: In meiner Branche kann es viel, viel komplizierter sein. Ein erweiterter Filter würde für etwas Kleines wie dieses gut funktionieren, aber meine Tabelle mit „unvollständigen Daten“ (hier dargestellt durch Tabelle_2) könnte Zehntausende von Datensätzen enthalten, und der „vollständige“ Datensatz, den ich zum Erweitern verwenden müsste, umfasst Hunderttausende von Datensätzen (zumindest wenn ich eine Abfrage ausführen würde, die alle relevanten Daten in tabellarischer Form darstellt).

Ich würde mich freuen, wenn hier jemand schon einmal auf dieses Problem gestoßen ist und eine Lösung parat hat. Ich bin für jede Hilfe dankbar.

Antwort1

Sie müssen Ihren Join vermutlich ungefähr so ​​bearbeiten:

SELECT Table1.*
FROM Table1 
INNER JOIN Table2 
ON Table2.Field_1 = Table1.Field_1
AND Table2.Field_2 = Table1.Field_2

Zu so etwas:

SELECT Table1.*
FROM Table1 
INNER JOIN Table2 
ON Table2.Field_1 = Table1.Field_1
AND IIF(Table2.Field_2 IS NULL,Table1.Field_2,Table2.Field_2) = Table1.Field_2

Verzeihen Sie mir, wenn das nicht ganz richtig ist. Ich glaube, Sie können es COALESCEin Access nicht verwenden, und ich glaube, es sollte IIFstattdessen verwendet werden. Ich habe Access leider seit vielen Jahren nicht mehr verwendet.

Das Prinzip besteht jedenfalls darin, dass Sie den Join so bearbeiten müssen, dass er lautet: „Wenn Feld 2 in Tabelle 2 null ist, verwenden Sie stattdessen Feld 2 aus Tabelle 1.“ Dies hat zur Folge, dass jede Zeile aus Tabelle 1 übereinstimmt.

verwandte Informationen