web-dev-qa-db-de.com

Wie verwende ich korrekt "Nicht gleich" in MS Access?

Zielsetzung:

Die Absicht dieser Abfrage besteht darin, alle unterschiedlichen Werte in einer Spalte auszuwählen, die nicht in einer ähnlichen Spalte in einer anderen Tabelle vorhanden sind.

Aktuelle Abfrage:

SELECT DISTINCT Table1.Column1
FROM Table2, Table1
WHERE Table1.Column1 <> Table2.Column1 

Ergebnisse aus der Abfrage:

Was passiert, wenn ich versuche, diese Abfrage auszuführen, füllt sich der Fortschrittsbalken fast sofort, aber dann friert er ziemlich ein und macht, soweit ich sehen kann, nichts anderes. Wenn ich ein = -Zeichen anstelle von <> verwende, werden die Werte ausgegeben, die genau gleich sind, und wenn ich Table2.Column1 durch einen tatsächlichen tatsächlichen Wert ersetze, funktioniert es einwandfrei.

Ich habe es gerade noch einmal ausgeführt, als ich diese Frage eingab, und die obige Abfrage gab mir diesmal eine Antwort, aber es enthält alle DISTINCT-Werte für die Spalte, nicht alle für diese Tabelle eindeutigen Werte, wie sie sollten.

Irgendwelche Ideen, was ich hier falsch mache oder vermisse?

10
Bryan

So was

SELECT DISTINCT Table1.Column1
FROM Table1
WHERE NOT EXISTS( SELECT * FROM Table2
    WHERE Table1.Column1 = Table2.Column1  )

Sie wollen NICHT EXISTS, nicht "Nicht gleich"


Übrigens möchten Sie selten eine FROM-Klausel wie folgt schreiben:

FROM Table1, Table2

dies bedeutet "FROM All Kombinationen jeder Zeile in Table1 mit jeder Zeile in Table2 ...". In der Regel sind dies viel mehr Ergebniszeilen, als Sie jemals sehen möchten. Und in dem seltenen Fall, dass Sie das wirklich tun möchten, ist die allgemein akzeptierte Syntax:

FROM Table1 CROSS JOIN Table2
17
RBarryYoung

In Access finden Sie einen Join wahrscheinlich schneller, wenn Ihre Tabellen nicht sehr klein sind:

SELECT DISTINCT Table1.Column1
FROM Table1 
LEFT JOIN Table2
ON Table1.Column1 = Table2.Column1  
WHERE Table2.Column1 Is Null

Dadurch werden alle Datensätze mit einer Übereinstimmung in Tabelle2 von der Liste ausgeschlossen.

2
Fionnuala

Ich habe Schwierigkeiten gehabt, eine Abfrage zu erhalten, um Felder aus Tabelle 1 zurückzugeben, die in Tabelle 2 nicht vorhanden sind, und die meisten der obigen Antworten ausprobiert, bis ich einen sehr einfachen Weg gefunden habe, um die gewünschten Ergebnisse zu erhalten.

Ich setze die Verbindungseigenschaften zwischen Tabelle 1 und Tabelle 2 auf die dritte Einstellung (3) (Alle Felder aus Tabelle 1 und nur die Datensätze aus Tabelle 2, bei denen die verbundenen Felder gleich sind) und platzierte das Attributfeld "Null" im Kriterienfeld der Abfrage in Tabelle 2 in dem Feld, für das ich getestet habe. Es funktioniert perfekt.

Vielen Dank an alle oben.

0
Fred Mason