Inner join ueber mehrere Tabellen
am 31.10.2007 16:54:27 von nikolai.onken
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
Re: Inner join ueber mehrere Tabellen
am 31.10.2007 17:43:19 von nikolai.onken
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
Re: Inner join ueber mehrere Tabellen
am 31.10.2007 21:04:21 von Claus Reibenstein
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