Abfrage "Entweder Oder" in WHERE-Klausel

funkyice

Benutzer
Beiträge
21
Hallo zusammen,

konnte eine entsprechende Lösung für meine Abfrage leider nicht finden. Ich kriege es einfach nicht hin, vl. weiß jemand zu helfen. Ich denke es ist schlicht ein Problem von Verwendung AND/OR/AND NOT sowie falschen Klammersetzungen.

Ich möchte in einer WHERE-Abfrage Ergebnisse filtern, die in einem bestimmten Feld "Code" entweder X oder Y sind, aber nie beides.

Aufbau der Tabelle als Beispiel:
KUNDE A | LIEF | ANSCHRIFT A
KUNDE A | HAUS | ANSCHRIFT B
Kunde X | LIEF | ANSCHRIFT X

In der Where Abfrage soll nun eingeschränkt werden, dass er mit immer die HAUS Anschrift ausgibt solange diese vorhanden ist. Ansonsten die LIEF Anschrift als Alternative.
Als Ergebnis sollte in diesem Fall rauskommen:
KUNDE A | HAUS | ANSCHRIFT B
KUNDE X | LIEF | ANSCHRIFT X


Danke für Eure Hilfe.
 
Werbung:
Als Vorschlag hätte ich das hier:

Code:
SELECT *
FROM funkyice
WHERE art = 'haus'
    UNION
SELECT *
FROM funkyice
WHERE kunde NOT IN (
    SELECT kunde
    FROM funkyice
    WHERE art = 'haus'
    )

Gruß
Hony
 
Moin Hony,

das schaut doch schon gut aus, auch wenn ich die Abfrage nicht verstehe. Für den Test sah das korrekt aus.
Jetzt muss ich das in meine weitaus größere Abfrage integrieren.

Danke!
 
Werbung:
das schaut doch schon gut aus, auch wenn ich die Abfrage nicht verstehe.
Das ist gut für die Lösung aber schlecht für dich.

Die Abfrage besteht aus 3 Teilbereichen. Der Erste ist ein einfacher SELECT:
Code:
SELECT *
FROM funkyice
WHERE art = 'haus'
Alle Tupel bei dem das Attribut art den Wert haus hat.

Der Zweite ist ebenfalls ein einfacher SELECT und benutzt als Ausschlusskriterium die Menge der ersten Abfrage reduziert auf das Attribut kunde:
Code:
SELECT *
FROM funkyice
WHERE kunde NOT IN (
    SELECT kunde
    FROM funkyice
    WHERE art = 'haus'
    )
Du Subanfrage ist fast identisch zur Ersten. Ich reduziere hier lediglich auf das Attribut kunde um einen Vergleich durchführen zu können. Die zweite Hauptanfrage liefert damit alle Tupel mit einem Kunden der nicht in der von der Subanfrage selektierten Menge vorhanden ist. Das müssen daher alle Tupel sein die keine Eintrag mit dem Wert haus für das Attribut art haben.

Anschließend werden die beiden Teilmengen noch mit UNION vereinigt.

Gruß
Hony
 
Zurück
Oben