Hallo Acces-o-Mania!
Ich bekomme es nicht hin, eine geeignete SQL Abfrage meiner Access 2013 Datenbank zu stellen, sodass die richtigen Datensätze zurückgegeben werden. Vielleicht könnt Ihr mir ja helfen? :)
Meine Datenbank enthält eine große Anzahl an Einträgen. Im Folgenden ein paar Beispiele:
ID | Col1Name [Varchar(255)] | Col2Name [Varchar(255)] | Col3Name [Bit] | Col4Name [Bit] | Col5Name [Longtext] |
1 | A1 | B1 | False | False | Text... |
2 | A1 | B2 | False | False | Text... |
3 | A2 | B1 | False | False | Text... |
Zitat
Anmerkung:
Col1Name und Col2Name sind beide als NOT NULL gesetzt, enthalten also zwangsläufig eine Zeichenfolge.
Jetzt will ich alle A-Einträge abfragen, bei denen Col3Name=True oder zu denen kein B-Eintrag existiert, der ein bestimmten String enthält (z.B. den String "B2"). Hier im Beispiel sollte also die Zeile mit der Col1Name=A2 ausgegeben werden.
Momentan probiere ich – ohne Erfolg – mit folgendem Statement herum:
SELECT Col1Name AS TempCol1 FROM DBTableName
WHERE NOT EXISTS (SELECT * FROM DBTableName WHERE Col1Name=TempCol1 AND Col2Text='B2')
OR Col3Name=True;Leider wird mir entweder immer eine falsche Menge zurückgegeben oder ich bekomme überhaupt keine Rückgabe, bzw. einen Error! Wisst Ihr wie ich diese Abfrage in SQL formulieren kann?
Vielen Dank für Eure Unterstützung! :)
FuzzyHair
Einen Spaltenalias kann man nicht zum Verknüpfen verwenden. Dieser wird so ziemlich zuletzt in der Reihenfolge der Abarbeitung der SQL-Anweisung erzeugt und steht somit vorher noch nicht zur Verfügung.
Die Felder sind zu qualifizieren (vorangestellte Tabellenherkunft). Da Du mehrere Instanzen der gleichen Tabelle verwendest, sind hier Tabellenaliase einzusetzen:
SELECT
A.Col1Name
FROM
DBTableName AS A
WHERE
NOT EXISTS
(
SELECT
NULL
FROM
DBTableName AS B
WHERE
B.Col1Name = A.Col1Name
AND
B.Col2Text = 'B2'
)
OR
A.Col3Name = True
Siehe auch Grundlagen - SQL ist leicht (2) - Alias (http://www.ms-office-forum.net/forum/showthread.php?t=298432)