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

Eigentlich einfache Abfrage

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von senna66, 20 Februar 2017.

  1. senna66

    senna66 Neuer Benutzer

    Ich entschuldige mich erstmal für diesen blödsinnigen Titel, aber mir fehlt einfach der Durchblick um diesen aussagekräftiger zu gestalten. Irgendwie verspüre ich gerade eine geistige Leere! ;-)

    Jetzt zu meinem Problem.

    ich habe zwei Tabellen



    Code:
    
    tbl_auto
    auto_id | marke
    -----------+----------
      1           |     VW
      2           |     AUDI
      3           |     BMW
      4           |     OPEL
    
    tbl_eigenschaften
    id           |     auto_id   |   eigenschaft | wert
    -----------+---------------+--------------------
      1           |          2       |      farbe        | blau
      2           |          2       |      farbe        | rot
      3           |          2       |      farbe        | gruen
      4           |          3       |      farbe        | schwarz
      5          |          3       |      farbe         | blau
      6          |          1       |      farbe         | rot
      7          |          1       |      farbe         | gruen
    

    Und jetzt hätte ich gerne eine Abfrage die mir die marke ausgibt von der es blaue UND gruene gibt.
    In dem oben genannten Beispiel wäre das nur Audi.

    Ich habe es mal so probiert

    SELECT * FROM tbl_auto auto LEFT JOIN tbl_eigenschaften a ON auto.auto_id = a.auto_id LEFT JOIN tbl_eigenschaften b ON auto.auto_id = b.auto_id WHERE (a.wert='blau' AND b.wert='gruen' )

    Funktioniert aber nicht!

    Viele Dank schon mal für eure Hilfe.
     
  2. drdimitri

    drdimitri Datenbank-Guru

    Code:
    SELECT auto.marke FROM tbl_auto auto INNER JOIN tbl_eigenschaften a ON auto.auto_id = a.auto_id 
    WHERE a.wert IN('blau','gruen') and a.eigenschaft='farbe'
    PS: "Funktioniert aber nicht" ist keine hilfreiche Fehlerbeschreibung.
     
  3. senna66

    senna66 Neuer Benutzer

    Danke erstmal, aber ich habe mich da wohl nicht ganz klar ausgedrückt.
    Bei deiner Abfrage werden alle Marken aufgeführt bei denen blaue ODER gruene Varianten existieren.
    Ich möchte aber nur die Marke bei der blaue UND gruene Varianten existieren, also nur Audi.




    CREATE TABLE IF NOT EXISTS `tbl_auto` (
    `auto_id` int(2) NOT NULL AUTO_INCREMENT,
    `marke` varchar(255) NOT NULL,
    PRIMARY KEY (`auto_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

    --
    -- Daten für Tabelle `tbl_auto`
    --

    INSERT INTO `tbl_auto` (`auto_id`, `marke`) VALUES
    (1, 'VW'),
    (2, 'Audi'),
    (3, 'BMW'),
    (4, 'Opel');





    CREATE TABLE IF NOT EXISTS `tbl_eigenschaften` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `auto_id` varchar(255) NOT NULL,
    `eigenschaft` varchar(255) NOT NULL,
    `wert` varchar(200) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

    --
    -- Daten für Tabelle `tbl_eigenschaften`
    --

    INSERT INTO `tbl_eigenschaften` (`id`, `auto_id`, `eigenschaft`, `wert`) VALUES
    (1, '2', 'farbe', 'blau'),
    (2, '2', 'farbe', 'rot'),
    (3, '2', 'farbe', 'gruen'),
    (4, '3', 'farbe', 'schwarz'),
    (5, '3', 'farbe', 'blau'),
    (6, '1', 'farbe', 'rot'),
    (7, '1', 'farbe', 'gruen');
     
  4. senna66

    senna66 Neuer Benutzer

    Ahhh, die geistige Leere schwindet dank eurer Anregung :)

    Der Thread AND Verknüpfung bei 2 Tabellen | Datenbank-Forum und drdimitri

    führten mich dann zur richtigen Abfrage

    SELECT auto.marke,count(auto.auto_id) FROM tbl_auto auto INNER JOIN tbl_eigenschaften a ON auto.auto_id = a.auto_id
    WHERE a.wert IN('blau','gruen') and a.eigenschaft='farbe' group by auto.auto_id having count(a.auto_id) >=2;


    Danke an alle!
     
  5. ukulele

    ukulele Datenbank-Guru

    Es ginge auch:
    Code:
    SELECT auto.marke,auto.auto_id
    FROM tbl_auto auto
    INNER JOIN tbl_eigenschaften e1 ON auto.auto_id = e1.auto_id AND e1.wert = 'blau'
    INNER JOIN tbl_eigenschaften e2 ON auto.auto_id = e2.auto_id AND e2.wert = 'gruen'
    Kann von Vorteil sein wenn du nicht gruppieren musst und mehr Eigenschaften ausgeben kannst.
     
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