Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Verschachtelte SQL Abfrage mit EXISTS

Begonnen von FuzzyHair, April 14, 2017, 09:07:05

⏪ vorheriges - nächstes ⏩

FuzzyHair

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:





IDCol1Name [Varchar(255)]Col2Name [Varchar(255)]Col3Name [Bit]Col4Name [Bit]Col5Name [Longtext]
1A1B1FalseFalseText...
2A1B2FalseFalseText...
3A2B1FalseFalseText...

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

ebs17

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
Mit freundlichem Glück Auf!

Eberhard

FuzzyHair

Jep, das war's! Vielen Dank!  :D

Das mit dem Tabellen-Alias ist eine gute Sache.