Andre Victor: Problem mit SQL-Statement

Hallo,

folgendes Problem:

habe 3 Tabellen

1. artikel
2. artikelzubehoer
3. zubehoer

artikel und zubehoer stehen in einer n:m Beziehung, daher die Zwischentabelle artikelzubehoer.

Nun möchte ich all das Zubehoer angezeigt bekommen, welches sich in Zubehoer befindet, sollte jedoch in artikelzubehoer ein Artikel einem bestimmten Zubehoer zugeordnet sein, dann nur das mit der gesuchten Artikelnummer.

Beispiel: Suche nach Artikelnummer 123

In artikelzubehoer steht artikelnummer: 123 und artikelnummerzubehoer = 4711

Als Ergebnis soll nun 4711 erscheinen und zusätzlich das ganze Zubehör das nicht in der Zwischentabelle artikelzubehoer zu finden ist.

Ich möchte umgehen, das ich für jedes Zubehoer, das für alle Artikel gültig verfügbar ist ein Eintrag in der Zwischentabelle artikelzubehoer nötig ist.

Mein versuch mit
SELECT r.artikelnummerzubehoer, bezeichnung1, bezeichnung2, bild FROM zubehoer r LEFT JOIN artikelzubehoer rel ON (r.artikelnummerzubehoer = rel.artikelnummerzubehoer) AND (rel.artikelnummer ="1520005900");

liefert immer jegliches Zubehoer, auch jenes welches in artikelzubehoer eigentlich einem anderen Artikel zugeordnet ist.

Gruss

André

  1. Hallo,

    folgendes Problem:

    habe 3 Tabellen

    1. artikel
    2. artikelzubehoer
    3. zubehoer

    artikel und zubehoer stehen in einer n:m Beziehung, daher die Zwischentabelle artikelzubehoer.

    Nun möchte ich all das Zubehoer angezeigt bekommen, welches sich in Zubehoer befindet, sollte jedoch in artikelzubehoer ein Artikel einem bestimmten Zubehoer zugeordnet sein, dann nur das mit der gesuchten Artikelnummer.

    Beispiel: Suche nach Artikelnummer 123

    In artikelzubehoer steht artikelnummer: 123 und artikelnummerzubehoer = 4711

    Als Ergebnis soll nun 4711 erscheinen und zusätzlich das ganze Zubehör das nicht in der Zwischentabelle artikelzubehoer zu finden ist.

    Ich möchte umgehen, das ich für jedes Zubehoer, das für alle Artikel gültig verfügbar ist ein Eintrag in der Zwischentabelle artikelzubehoer nötig ist.

    Zum Verstaendnis: artikelzubehoer definiert nicht jede Beziehung zwischen artikel und zubehoer, sondern nur exklusive Verbindungen? D.h. ein Eintrag in zubehoer "gehoert" zu jedem artikel, wenn es keinen Eintrag in artikelzubehoer gibt?

    Mein versuch mit
    SELECT r.artikelnummerzubehoer, bezeichnung1, bezeichnung2, bild FROM zubehoer r LEFT JOIN artikelzubehoer rel ON (r.artikelnummerzubehoer = rel.artikelnummerzubehoer) AND (rel.artikelnummer ="1520005900");

    liefert immer jegliches Zubehoer, auch jenes welches in artikelzubehoer eigentlich einem anderen Artikel zugeordnet ist.

    Was sind denn eigentlich die Primaerschluessel?

    Nick

    --
    --------------------------------------------------
    http://www.xilp.eu
    XILP Internet Links People
    Dein persoenliches privates Netzwerk
    aus Freunden, Verwandten, Bekannten und Kollegen.
    --------------------------------------------------
    1. Zum Verstaendnis: artikelzubehoer definiert nicht jede Beziehung zwischen artikel und zubehoer, sondern nur exklusive Verbindungen? D.h. ein Eintrag in zubehoer "gehoert" zu jedem artikel, wenn es keinen Eintrag in artikelzubehoer gibt?

      Das ist so korrekt. Ich müsste ja ansonsten in der Zwischentabelle artikelzubehoer für jeden Artikel jegliches Zubehoer hinterlegen, also z.B. artikelnummer = 1, artikelnummerzubehoer = 1
      artikelnummer = 1, artikelnummerzubehoer = 2
      artikelnummer = 1, artikelnummerzubehoer = 3
      usw.
      artikelnummer = 2, artikelnummerzubehoer = 1
      artikelnummer = 2, artikelnummerzubehoer = 2
      artikelnummer = 2, artikelnummerzubehoer = 3

      Was sind denn eigentlich die Primaerschluessel?

      Die Primärschlüssel sind in Tabelle artikel = artikelnummer und in zubehoer = artikelnummerzubehoer. In der Zwischentabelle artikelzubehoer sind dann nur diese beiden Primärschlüssel enthalten.

      Gruss André

      1. Hi,

        ich würde mal sagen, dann musst/kannst du imho folgendes tun:

        Selektiere alles Zubehör, welches direkt zu dem Artikel verlinkt ist. (Inner Join, Subquery)
        Und füge mittels UNION (ALL) Operator die Selektion allen Zubehörs an, die nie in [artikelzubehoer] vorkommen.

        Ich gehe davon aus, dass allgemeines Zubehör für alle Produkte, keine expliziten Einträge in [artikelzubehoer] hat.

        Ansonsten könntest du "allgemeines" Zubhehör in der [zubehoer] Tabelle auch mit einem Bitflag kennzeichnen.

        Cheers,
        Frank

        1. Hi,

          ich würde mal sagen, dann musst/kannst du imho folgendes tun:

          Selektiere alles Zubehör, welches direkt zu dem Artikel verlinkt ist. (Inner Join, Subquery)
          Und füge mittels UNION (ALL) Operator die Selektion allen Zubehörs an, die nie in [artikelzubehoer] vorkommen.

          Ich gehe davon aus, dass allgemeines Zubehör für alle Produkte, keine expliziten Einträge in [artikelzubehoer] hat.

          Ansonsten könntest du "allgemeines" Zubhehör in der [zubehoer] Tabelle auch mit einem Bitflag kennzeichnen.

          Wollte mich noch herzlich bedanken. Die Denkanstösse haben gefruchtet. Habe es jetzt über eine UNION SELECT - Query gelöst.

          André