Gemeinsame Werte abfragen

tvtotal

Erfahrenes Mitglied
Hallo und guten Morgen,

ich habe 5 Tabellen und eine Frage:

Code:
1. Tab: artikel
id name ...
1a Besen
1b Schaufel
1c Kombi

2. Tab: kategorie
id name ...
2a Kat1
2b Kat2
2c Kat3

3. Tab: gratisartikel
id name ...
3a 2Hefte
3b 3Hefte
3c 4Hefte

4. Tab: gratisartikel2artikel_oder_kategorie
id artikel_kat_id gratisartikel
1 1a 3a
2 1b 3b
3 1c 3c
usw...

4. Tab: artikel_2_kategorie
ID artikelid katid
1 1a 2a
2 1a 2b
3 1a 2c
4 1b 2a
5 1b 2b
6 1b 2c
usw.

Jetzt will ich eine Ausgabe machen, die nur die Gratisartikel ausgibt, die allen Artikeln direkt oder über die Kategorie zugeordnet ist.

Danke und schönen Samstag

tvtotal
 
Hallo,

das sollte ungefähr folgendermaßen machbar sein:

1. Join der Artikel und Kategorien über die entsprechende Zuordnungstabelle (falls es Artikel oder Kategorien ohne Zuordnung gibt, müsste das ein outer join sein)
2. Join der Gratisartikel mit ihrer Zuordnungstabelle
3. Join der Ergebnisse von 1. und 2. über eine OR-verknüpfte Bedingung
Code:
subquery1.artikel_id = subquery2.artikel_kat_id
or subquery1.kategorie_id = subquery2.artikel_kat_id

Aus Gründen der Performance könnte es auch sinnvoll sein, statt der OR-Verknüpfung zwei outer joins zu verwenden (mit zweifacher Verwendung der Menge 2., die einmal über artikel_id und einmal über kategorie_id verknüpft werden müsste) aber das hängt vom verwendeten RDBMS ab - und wäre zu testen.

Aus Modellierungssicht ist die Tabelle gratisartikel2artikel_oder_kategorie problematisch, weil sie die Artikel- und Kategoriezuordnung in einer Spalte unterbringt - da würde ich zwei Spalten verwenden, denn denn könnte man den Join präziser formulieren und geeignete Indizes definieren. Aber das sieht aus wie ORM-Code, so dass es wahrscheinlich programmatische Überlegungen gibt, die für die Modellierung sprachen.

Gruß

Martin
 
Hallo und Danke,

ich habe was ähnliches im Forum gefunden. Mal schauen, ob ich es hinbekomme. Ich lasse hier deswegen erst mal offen.

Grüße

tvtotal
 
Zurück