Eigentlich einfache Abfrage

senna66

Neuer Benutzer
Beiträge
3
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.
 
Werbung:
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.
 
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');
 
Werbung:
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.
 
Zurück
Oben