Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Abfrage "Entweder Oder" in WHERE-Klausel

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von funkyice, 12 März 2014.

  1. funkyice

    funkyice Benutzer

    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.
     
  2. Hony%

    Hony% Datenbank-Guru

    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
     
  3. funkyice

    funkyice Benutzer

    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!
     
  4. Hony%

    Hony% Datenbank-Guru

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden