quir: sql - Abfrage über zwischentabelle ohne Joins...

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

  1. 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.NAME

    Werden 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
    Name

    ProduktZuKategorie

    Produkt_ID
    Kategorie_ID

    Kategorie

    ID
    Name

    Gruß

    Hans

    1. 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

    2. 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....

  2. 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