sql - Abfrage über zwischentabelle ohne Joins...
quir
- datenbank
0 Hans0 Vinzenz Mai
Hallo,
Ich habe folgende Frage:
Ein Datenmodel:
Ein Produkt kann mehreren Kategorien zugewiesen werden (also mehrere Kategorien können einem Produkt zugewiesen werden...), dies geschieht über die Zwischentabelle ProduktZuKategorie.
Durch eine Suchfunktion soll nun Produkt-Name sowie die Erste zugewiesene Kategorie ausgegeben werden. Ich darf dazu KEINE JOINS einsetzen, sondern nur mit WHERE arbeiten.
Mache ich folgendes:
SELECT p.ID, p.NAME, k.NAME FROM PRODUKT p, PRODUKTZUKATEGORIE pk , KATEGORIE k WHERE pk.PRODUKT_ID = p.ID AND pk.KATEGORIE_ID = k.ID GROUP BY p.ID, p.NAME, k.NAME
Werden für jeden Eintrag in der Zwischentabelle alle ausgegeben.
Wie kann ich dies umgehen ohne Joins zu verwenden?
Produkt
-------------
ID
Name
ProduktZuKategorie
-------------------
Produkt_ID
Kategorie_ID
Kategorie
---------------
ID
Name
Hi !
Mache ich folgendes:
SELECT p.ID, p.NAME, k.NAME FROM PRODUKT p, PRODUKTZUKATEGORIE pk , KATEGORIE k WHERE pk.PRODUKT_ID = p.ID AND pk.KATEGORIE_ID = k.ID GROUP BY p.ID, p.NAME, k.NAMEWerden für jeden Eintrag in der Zwischentabelle alle ausgegeben.
Wie kann ich dies umgehen ohne Joins zu verwenden?
Vielleicht so:
select p.id, p.name. k.name from produkt p, kategorie k where p.id=k.id and (p.id, k.id) in (select produkt_id, min(kategorie_id) from produktzukategorie group by produkt_id);
Produkt
ID
NameProduktZuKategorie
Produkt_ID
Kategorie_IDKategorie
ID
Name
Gruß
Hans
Hi !
Hallo
Vielleicht so:
select p.id, p.name. k.name from produkt p, kategorie k where p.id=k.id and (p.id, k.id) in (select produkt_id, min(kategorie_id) from produktzukategorie group by produkt_id);
Das scheint zu funktionieren, wenn ich aus dem subquery produkt_id entferne, irgendwie scheint nur eine result-column in einem subquery erlaubt zu sein.
vielen dank
Hi
Vielleicht so:
select p.id, p.name. k.name from produkt p, kategorie k where p.id=k.id and (p.id, k.id) in (select produkt_id, min(kategorie_id) from produktzukategorie group by produkt_id);
Hi, nun werden aber in der suche 2 kategorien defniert, welche die zu findenden produkte beinhalten sollte (also zbsp. k.id = 1 und 2)
erweitere ich das sql wird immer nur pro kategorie 1 produkt angezeigt....
Hallo
Durch eine Suchfunktion soll nun Produkt-Name sowie die Erste zugewiesene Kategorie ausgegeben werden. Ich darf dazu KEINE JOINS einsetzen, sondern nur mit WHERE arbeiten.
wer kommt auf so blödsinnige Ideen. Jedes mir bekannt DBMS erlaubt es, statt expliziter JOIN-Syntax die Join-Bedingung in der WHERE-Klausel zu formulieren. Selbst dann handelt es sich selbstverständlich um einen Join.
SELECT p.ID, p.NAME, k.NAME FROM PRODUKT p, PRODUKTZUKATEGORIE pk , KATEGORIE k WHERE pk.PRODUKT_ID = p.ID AND pk.KATEGORIE_ID = k.ID GROUP BY p.ID, p.NAME, k.NAME
Mehr dazu in http://aktuell.de.selfhtml.org/artikel/review/datenbanken/joins/.
Freundliche Grüße
Vinzenz