quasi_modem: MySQL Verknüpfungstabelle Abfrage

Guten Tag,

ich habe in etwa folgende Tabelle in MySQL:

+---------+------+
| stoffID | farbID
+---------+------+
|       1 |    2 |
|       1 |    8 |
|       2 |    2 |
|       2 |    9 |
|       3 |    2 |
|       3 |   10 |
|       4 |    2 |
|       4 |    7 |
|       5 |    6 |
|       6 |   12 |
|       6 |   14 |
|       6 |    2 |
|       6 |   15 |
|       6 |    8 |
|       7 |   12 |
|       7 |   14 |
|       7 |    1 |
|       7 |    2 |
|       7 |    8 |
+---------+------+

Nun möchte ich alle Stoffe mit der Farbe 2 und 8 herausfinden - also eine Abfrage, die die stoffID zurückliefert, die sowohl die farbID 1 als auch 8 zugewiesen haben. "WHERE farbID = 1 AND farbID = 8" ist natürlich Quatsch - aber wie gehts richtig?

Hoffe, es kann mir jemand helfen.
Danke vorab,
quasi_modem.

  1. Moin,

    Nun möchte ich alle Stoffe mit der Farbe 2 und 8 herausfinden - also eine Abfrage, die die stoffID zurückliefert, die sowohl die farbID 1 als auch 8 zugewiesen haben. "WHERE farbID = 1 AND farbID = 8" ist natürlich Quatsch - aber wie gehts richtig?

    mit OR.

    --Heinz

    1. Moin,

      mit OR.

      --Heinz

      Nein, leider nicht, dann bekomme ich ja alle Datensätze mit 8 ODER 2 als Stofffarbe... Ich möchte aber alle, die die Farbe in Kombination haben. Also dürfte nur stoffID 1, 6 und 7 als Ergebnis zurück kommen.

      Andere Idee???

      mysql> WHERE enID = 2 OR enID = 8;
      +---------+------+
      | stoffID | farbID|
      +---------+------+
      |       1 |    2 |
      |       1 |    8 |
      |       2 |    2 |
      |       3 |    2 |
      |       4 |    2 |
      |       6 |    2 |
      |       6 |    8 |
      |       7 |    2 |
      |       7 |    8 |
      +---------+------+
      9 rows in set (0.00 sec)

      1. Hallo,

        Nein, leider nicht, dann bekomme ich ja alle Datensätze mit 8 ODER 2 als Stofffarbe... Ich möchte aber alle, die die Farbe in Kombination haben. Also dürfte nur stoffID 1, 6 und 7 als Ergebnis zurück kommen.

        Andere Idee???

        nutze einen Selfjoin (geht immer) oder ein Subselect (MySQL 4.1).

        Freundliche Grüße

        Vinzenz

        1. nutze einen Selfjoin

          Freundliche Grüße

          Vinzenz

          Hab großartigsten Dank! Es funktioniert!

  2. Hallo

    +---------+------+
    | stoffID | farbID
    +---------+------+
    |       1 |    2 |
    |       1 |    8 |
    |       7 |   14 |
    |       7 |    1 |
    |       7 |    2 |
    |       7 |    8 |
    +---------+------+

    Nun möchte ich alle Stoffe mit der Farbe 2 und 8 herausfinden - also eine Abfrage, die die stoffID zurückliefert, die sowohl die farbID 1 als auch 8 zugewiesen haben. "WHERE farbID = 1 AND farbID = 8" ist natürlich Quatsch - aber wie gehts richtig?

    OR, wie vom Gemeindediener empfohlen, ginge. Meiner Meinung nach ist IN die bessere Lösung.

    Freundliche Grüße

    Vinzenz

  3. Nun möchte ich alle Stoffe mit der Farbe 2 und 8 herausfinden - also eine Abfrage, die die stoffID zurückliefert, die sowohl die farbID 1 als auch 8 zugewiesen haben. "WHERE farbID = 1 AND farbID = 8" ist natürlich Quatsch - aber wie gehts richtig?

    Machs wie Vinnie vorschlaegt oder wage Dich mal an den Operator mit dem Namen OR.