Inner join ueber mehrere Tabellen

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