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 COALESCE
in Access nicht verwenden, und ich glaube, es sollte IIF
stattdessen 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.