Inner join ueber mehrere Tabellen

Hallo,

ich habe Probleme folgende Abfrage zu realisieren:

Finde alle Artikel die die SFS_Styles_id 1 AND 2 AND 5 haben und die
die SFS_Instruments_id 3 AND 7 AND 15 AND 213 haben (oder OR).

Die Tabellen sehen wie volgt aus:

SFS_Article (id, name, etc..)
SFS_Article_has_SFS_Styles (SFS_Article_id, SFS_Styles_id)
SFS_Article_has_SFS_Instruments (SFS_Article_id, SFS_Instruments_id)

Mit einer verwandten Tabelle kann ich es mit folgender Abfrage loesen
- wie aber mit mehreren?

SELECT *, COUNT(SFS_LibraryArticle.id) as cnt FROM SFS_LibraryArticle
INNER JOIN SFS_LibraryArticle_has_SFS_Styles as las ON
las.SFS_LibraryArticle_id = SFS_LibraryArticle.id AND
las.SFS_Styles_id IN(1,3)
GROUP BY SFS_LibraryArticle.id HAVING cnt=2

Gruesse,

Nikolai
nikolai.onken [ Mi, 31 Oktober 2007 16:54 ] [ ID #1858511 ]

Re: Inner join ueber mehrere Tabellen

Ich habe doch eine Loesung gefunden:

SELECT SFS_LibraryArticle.*, COUNT(lap.SFS_Parameters_id) FROM
SFS_LibraryArticle
INNER JOIN SFS_LibraryArticle_has_SFS_Styles as las ON
las.SFS_LibraryArticle_id = SFS_LibraryArticle.id AND
las.SFS_Styles_id IN(1,3)
INNER JOIN SFS_LibraryArticle_has_SFS_Parameters as lap ON
lap.SFS_LibraryArticle_id = SFS_LibraryArticle.id AND
lap.SFS_Parameters_id IN(1,2)
INNER JOIN SFS_LibraryArticle_has_SFS_Instruments as lai ON
lai.SFS_LibraryArticle_id = SFS_LibraryArticle.id AND
lai.SFS_Instruments_id IN(1)
GROUP BY SFS_LibraryArticle.id HAVING COUNT(DISTINCT
las.SFS_Styles_id) = 2 AND COUNT(DISTINCT lap.SFS_Parameters_id) = 2
AND COUNT(DISTINCT lai. SFS_Instruments_id) = 1

Danke,

Nikolai
nikolai.onken [ Mi, 31 Oktober 2007 17:43 ] [ ID #1858512 ]

Re: Inner join ueber mehrere Tabellen

Nikolai Onken schrieb:

> ich habe Probleme folgende Abfrage zu realisieren:
>
> Finde alle Artikel die die SFS_Styles_id 1 AND 2 AND 5 haben und die
> die SFS_Instruments_id 3 AND 7 AND 15 AND 213 haben (oder OR).

Wohl eher OR, da SFS-Styles wohl niemals mehrere Werte gleichzeitig
haben wird :-)

> Mit einer verwandten Tabelle kann ich es mit folgender Abfrage loesen
> - wie aber mit mehreren?

Mit mehreren JOINs.

Gruß. Claus
Claus Reibenstein [ Mi, 31 Oktober 2007 21:04 ] [ ID #1858513 ]
Datenbanken » de.comp.datenbanken.mysql » Inner join ueber mehrere Tabellen

Vorheriges Thema: Warum meistens Emptystring anstatt NULL?
Nächstes Thema: Performance Frage Subquery vs. Temporary Table