LenaLuna: SELECT-Anweisung-Problem

hallo foren

folgendes problem:

tabelle

id    id_benutzer    farbe

1     1              rot
2     1              blau
3     1              gelb
4     2              rot
5     2              blau
6     3              rot
7     3              blau
8     3              gelb
9     3              gruen

gibt es eine möglichkeit, dass ich mit einer SELECT-anweisung herausfinden kann welcher benutzer
die farben rot und blau und gelb verwendet?

die betonung liegt also auf das wörtchen "und".

"oder" ist ja kein problem

SELECT DISTINCT id_benutzer FROM tabelle WHERE farbe = 'rot' OR farbe = 'blau' OR farbe = 'gelb';

"und" kann ich natürlich nicht so schreiben:

SELECT DISTINCT id_benutzer FROM tabelle WHERE farbe = 'rot' AND farbe = 'blau' AND farbe = 'gelb';

da findet mysql nämlich gar nichts mehr.
ist auch klar weil ja zeilenweise abgearbeitet wird kann die bedingung aller drei farben auf die spalte farbe nie zutreffen.

frage nun wie mache ich das mit einer SELECT-anweisung.
geht das überhaupt?

gruss LenaLuna

  1. Hi!

    tabelle

    id    id_benutzer    farbe

    1     1              rot
    2     1              blau
    3     1              gelb
    4     2              rot
    5     2              blau
    6     3              rot
    7     3              blau
    8     3              gelb
    9     3              gruen

    frage nun wie mache ich das mit einer SELECT-anweisung.
    geht das überhaupt?

    Es ginge vielleicht mit folgendem Trick:

    SELECT id_benutzer
        FROM tabelle
        WHERE farbe = 'rot'
            OR farbe = 'blau'
            OR farbe = 'gelb
        GROUP BY id_benutzer
        HAVING COUNT(*) = '3'

    Ich gruppiere nach Benutzern, die rot, gelb oder blau eingetragen haben, und sortiere am Ende alle aus die nicht 3  Farben haben. Setzt voraus das jeder Benutzer nur 1 Datensatz pro Farbe hat.

    Grüße
    Andreas

  2. Halihallo LenaLuna

    gibt es eine möglichkeit, dass ich mit einer SELECT-anweisung herausfinden kann welcher benutzer
    die farben rot und blau und gelb verwendet?

    SELECT DISTINCT
          A.benutzer_id
       FROM
          tabelle AS A,
          tabelle AS B,
          tabelle AS C
       WHERE
          A.benutzer_id=B.benutzer_id AND B.benutzer_id=C.benutzer_id AND
          A.farbe='rot' AND
          B.farbe='blau' AND
          C.farbe='gelb'

    Das ist übrigens "bool'sche Suche auf Datenbank abgebildet" und behilft sich mehrerer
    Alias derselben Tabelle.

    "und" kann ich natürlich nicht so schreiben:

    Jups ;)

    frage nun wie mache ich das mit einer SELECT-anweisung.
    geht das überhaupt?

    unschön (aperformant), aber ja.

    Viele Grüsse

    Philipp

    1. hallo phillip

      oh auf die idee wäre ich nicht gekommen.

      im grunde genommen ist ja dies das gleiche wie wenn du über mehrere unterschiedliche tabellen abfrägst.

      muss ehrlich sagen habe noch nie mit alias gearbeitet.

      sei umarmt

      gruss LenaLuna

      1. Halihallo LenaLuna

        im grunde genommen ist ja dies das gleiche wie wenn du über mehrere unterschiedliche tabellen abfrägst.

        Genau. MySQL spielt das keine Rolle, obs die gleiche oder eine andere ist. Verschiedene
        Alias werden von der DB so (naja, fast) behandelt, als wären es verschiedene Tabellen.

        muss ehrlich sagen habe noch nie mit alias gearbeitet.

        Dann ist ja jetzt die Zeit gekommen ;)

        ---

        Aber: schau dir nochmals den Lösungsvorschlag von Andreas an (der ist nämlich wirklich
        auch sehr gelungen, wenn's bei AND bleibt und du keine komplexen AND/OR Verschachtelungen
        abfragen möchtest). Zudem ist er wesentlich performanter (in vielen Fällen zumindest).

        Viele Grüsse

        Philipp