ORACLE SQL 2 Kriterien abfragen

  • Hallo @ all!
    ich habe ein problem.
    und zwar folgendes:

    Tabelle (Werte):

    Header: WERT - BESCHREIBUNG - ID
    Rows:

    hallo - Ein Test - 0
    hallo - Ein weiterer Test - 1
    test1 - Irgendein Test - 4
    test2 - Irgendein zweiter Test - 3
    test3 - Irgendwas - 0
    test4 - weiter - 6

    und jetzt soll die abfrage alle "rows" abfragen, welche (wenn sie durch "WERT" 2 mal vorhanden sind (z.B. 2x mal "hallo") nur die, mit der ID 1 und nicht mit der ID 0 abfragt

    UND

    wenn der wert nur 1 mal enthalten ist, sollen auch die mit der ID = 0 abgefragt werden.

    könnt ihr mir weiterhelfen?

    verzweifle schön langsam

    mfg
    Dizzer22000

  • Selektiere alles, gruppiere nach WERT. Mit der Aggregatfunktion COUNT kannst du dann abfragen, wie oft dieser WERT vorkommt. Diese Abfrage verwendest du als Unterabfrage und selektierst aus deiner Tabelle genau die WERTe, die 2x vorkommen (laut Unterabfrage), bzw. die WERTe mit ID 0, die nur 1x vorkommen.

    Frage zu deinem Datenbankschema: Was ist der Primärschlüssel deiner Tabelle?

  • Als Primary Key verwende ich eine eigene Spalte (UniqueID).
    Wie funktioniert das mit den unterabfragen.

    kenn mich da leider nicht so gut aus... könntest du es mir vll. zeigen??
    bitte, danke...

    mfg
    dizzer22000

  • ich geh von nem table test aus (mysql, aber das sollte hier egal sein):

    so kannst du alle werte ausgeben die doppelt vorkommen:

    Code
    select wert from test group by wert having count(*)=2;

    dann kannst du sagen, du willst alle zeilen ausgeben mit id=1, wo der wert in der liste, der doppelten vorkommt:

    Code
    select * from test t 
    where t.id=1 and t.wert in 
       (select wert
        from test
        group by wert
        having count(*)=2);

    selbiges kannst du mit den einfach vorkommenden machen.

    kombinieren kannst du 2 abfragen mittels 'union':

    Code
    (select * from test t where t.id=0 and t.wert in (select wert from test group by wert having count(*)=1))
    union
    (select * from test t where t.id=1 and t.wert in (select wert from test group by wert having count(*)=2))

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!