11 Stimmen

Wie verwende ich "Not Equal" in MS Access richtig?

Zielsetzung:

Der Zweck dieser Abfrage ist es, alle eindeutigen 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 der Abfrage:

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

Ich habe es gerade wieder ausgeführt, während ich diese Frage tippe, und die obige Abfrage gab mir eine Antwort dieses Mal, aber es hat alle DISTINCT-Werte für die Spalte nicht alle Werte eindeutig zu nur dieser Tabelle, wie es sollte.

Hat jemand eine Idee, was ich hier falsch mache oder übersehe?

17voto

RBarryYoung Punkte 53364

Wie diese

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

Sie wollen NOT EXISTS, nicht "Not Equal".


Übrigens, eine FROM-Klausel wie diese sollten Sie nur selten schreiben:

FROM Table1, Table2

denn dies bedeutet "VON alle Kombinationen aus jeder Zeile in Tabelle1 mit jeder Zeile in Tabelle2..." Normalerweise sind das viel mehr Ergebniszeilen, als Sie jemals sehen wollen. Und in dem seltenen Fall, dass Sie das wirklich tun wollen, ist die akzeptiertere Syntax:

FROM Table1 CROSS JOIN Table2

3voto

Fionnuala Punkte 89346

In Access ist ein Join wahrscheinlich schneller, es sei denn, Ihre Tabellen sind sehr klein:

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.

0voto

Fred Mason Punkte 1

Ich habe mich bemüht, eine Abfrage so zu gestalten, dass sie Felder aus Tabelle 1 zurückgibt, die in Tabelle 2 nicht vorhanden sind, und habe die meisten der oben genannten Antworten ausprobiert, bis ich eine sehr einfache Möglichkeit gefunden habe, die gewünschten Ergebnisse zu erhalten.

Ich habe die Verknüpfungseigenschaften zwischen Tabelle 1 und Tabelle 2 auf die dritte Einstellung (3) gesetzt (alle Felder aus Tabelle 1 und nur die Datensätze aus Tabelle 2, bei denen die verknüpften Felder gleich sind) und im Kriterienfeld der Abfrage in Tabelle 2 in dem Feld, das ich getestet habe, ein Ist-Null gesetzt. Es funktioniert perfekt.

Trotzdem vielen Dank an alle oben genannten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X