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

SQL Abfrage mit mehreren Kriterien

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von sabrakadabra, 6 August 2020.

  1. sabrakadabra

    sabrakadabra Neuer Benutzer

    Bin Anfänger, also bitte etwa Nachsicht, ich weiß aber nicht, wie ich das bewerkstelligen kann.

    Ich habe die Tabelle "Listendetails" mit folgenden Spalten:
    listen_id
    produkt_id
    menge
    ...

    Beispiel für Datensätze:
    listen_id / produkt_id / menge
    1 / 1 / 1
    1 / 2 / 1
    2 / 1 / 1
    2 / 2 / 2
    ...

    Ich möchte nun "Listendetails" nach produkt_id und menge abfragen und möchte die listen_id bekommen. ich möchte z. b. wissen, welche liste einträge in listendetails hat für die gilt produkt_id = 1 und menge = 1 und produkt_id = 2 und menge = 1.

    Eine Abfrage wie "select listen_id from Listendetails where produkt_id = 1 and menge = 1 and produkt = 2 and menge = 1" gibt logischerwise kein Ergebnis, weil produkt_id nicht 1 und 2 gleichzeitig sein kann. Als Ergebnis sollte ich listen_id 1 bekommen, weiß aber leider nicht, wie ich die SQL Abfrage entsprechend stellen muss.
     
  2. Walter

    Walter Administrator Mitarbeiter

    OR mit Klammern verwenden.
     
  3. sabrakadabra

    sabrakadabra Neuer Benutzer

    bei "select listen_id from Listendetails where (produkt_id = 1 and menge = 1) or (produkt_id = 2 and menge = 1)

    bekomme ich drei Ergebnisse zurück
    listen_id
    1
    1
    2

    Das ist nicht das was ich möchte. Wenn ich z. B. weiß, dass Produkt1 mit Menge1 und Produkt2 mit Menge1 zusammen auf einer Liste stehen muss, möchte ich alle Listenids anzeigt bekommen, wo die Kombination "Produkt1 mit Menge1 und Produkt2 mit Menge1" vorkommt.

    Beim Beispiel wäre das ein einzelnes Ergebnis zurück, listen_id = 1.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# select * from sabrakadabra ;
     l | p | menge
    ---+---+-------
     1 | 1 |     1
     1 | 2 |     1
     2 | 1 |     1
     2 | 2 |     2
    (4 rows)
    
    test=*# select l from sabrakadabra where menge = 1 and p in (1,2) group by l having count(p) = 2;
     l
    ---
     1
    (1 row)
    
     
  5. akretschmer

    akretschmer Datenbank-Guru

    alternativ:

    Code:
    test=*# with temp as (select l, array_agg(p) as p from sabrakadabra where menge = 1 group by l) select l from temp where p = array[1,2];
     l
    ---
     1
    (1 row)
    
     
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