Artikel mit (mindestens) gleichen Attributen?

Artikel mit (mindestens) gleichen Attributen?

am 13.04.2007 13:04:37 von Maja

Hallo!

Ich habe folgendes Problem:

Es existieren zwei Tabellen. Eine mit Artikeln in (etwa) folgender
Form:

create table artikel
(
a_id int not null primary key,
bezeichnung varchar(30),
[...]
);

sowie eine Tabelle attrib, die Eigenschaften der Artikel enthält:

create table attrib
(
a_id int not null,
attrib_key int not null,
[...]
);

Zu jedem Artikel in artikel gibt es eine beliebige Menge an Eigenschaften
in attrib, der verbindende Schlüssel ist a_id.

Frage: Ich gebe eine Artikelnummer a_id vor und will die Artikelnummern
aller Artikel haben, die mindestens die gleichen Eigenschaften haben wie
der vorgegebene Artikel. Sie dürfen weitere haben, aber nicht weniger.

Mein erster Ansatz ist ein multipler self-join, für jedes Attribut des
vorgegebenen Artikels einmal. Kommt mir nicht sehr sinnvoll vor, bei=20
vielen Attributen wird das Teil schnell gigantisch.

Gibt es bessere Möglichkeiten? Für hilfreiche Hinweise wäre ich Dan=
kbar.

Martin=20

Re: Artikel mit (mindestens) gleichen Attributen?

am 13.04.2007 16:49:56 von Kai Ruhnau

maja@dwf.de wrote:
> Es existieren zwei Tabellen. Eine mit Artikeln in (etwa) folgender
> Form:
>
> create table artikel
> (
> a_id int not null primary key,
> bezeichnung varchar(30),
> [...]
> );
>
> sowie eine Tabelle attrib, die Eigenschaften der Artikel enthält:
>
> create table attrib
> (
> a_id int not null,
> attrib_key int not null,
> [...]
> );
>
> Zu jedem Artikel in artikel gibt es eine beliebige Menge an Eigenschaften
> in attrib, der verbindende Schlüssel ist a_id.
>
> Frage: Ich gebe eine Artikelnummer a_id vor und will die Artikelnummern
> aller Artikel haben, die mindestens die gleichen Eigenschaften haben wie
> der vorgegebene Artikel. Sie dürfen weitere haben, aber nicht weniger.

SELECT artikel.*, COUNT(*) as Anzahl
FROM artikel
INNER JOIN attrib USING (a_id)
WHERE attrib.attrib_key IN ( {Liste IDs} )
GROUP BY artikel.a_id
HAVGING Anzahl={Anzahl in Liste IDs}

Grüße
Kai

--
This signature is left as an exercise for the reader.