Announcement

Collapse
No announcement yet.

Kompliziertes Select in m:m Relation

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Kompliziertes Select in m:m Relation

    Hallo miteinander

    Ich habe eine Artikel und eine Kategorie Tabelle die ueber eine m:m Verbindungstabelle verknuepft sind.

    Bsp.:
    articleId categoryId
    A1 cat1
    A1 cat2
    A1 cat3
    A2 cat1
    A2 cat2
    A2 cat4
    A3 cat1

    Es koennen also zu einem Artikel mehrere Kategorien zugeordnet werden.

    Ich moechte nun mit einer Abfrage alle Artikel bekommen, die einer definierten Menge von Kategorien zugeordnet sind.
    Also z.B. moechte ich alle articleId's erhalten die cat1, cat2 und cat3 zugeordnet sind. In diesem Beispiel waere das nur A1, nicht aber A2 da dieser cat3 nicht hat.

    Weiss jemand wie man das ohne zu grossen Aufwand realisieren kann?

    Danke & Gruss

  • #2
    Hallo,
    Originally posted by flarno11 View Post
    ...Weiss jemand wie man das ohne zu grossen Aufwand realisieren kann?
    Ja!

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      unglaublich informativ deine antwort

      Comment


      • #4
        Hallo,

        Falk hat doch Deine Frage erschöpfend beantwortet

        Evtl impizierst Du aber auch so etwas in Deine Frage
        [highlight=sql]
        with Binde as
        (SELECT 1 art, 'a' kat FROM dual UNION ALL
        SELECT 1 , 'b' FROM dual UNION ALL
        SELECT 2 , 'a' FROM dual UNION ALL
        SELECT 2 , 'b' FROM dual UNION ALL
        SELECT 2 , 'c' FROM dual UNION ALL
        SELECT 3 , 'a' FROM dual),
        artikel AS
        (SELECT 1 nummer, 17 wert FROM dual UNION ALL
        SELECT 2 , 23 FROM dual UNION ALL
        SELECT 3 , 37 FROM dual UNION ALL
        SELECT 4 , 11 FROM dual UNION ALL
        SELECT 5 , 51 FROM dual UNION ALL
        SELECT 6 , 24 FROM dual)
        SELECT artikel.nummer FROM artikel
        where nummer in (SELECT art FROM Binde WHERE kat = 'a' OR kat = 'b' OR kat = 'c' GROUP BY art HAVING Sum(1)>=3);
        [/highlight]

        Evtl dann noch mit case etwas pushen.

        Gruß

        Martin
        Zuletzt editiert von Martin R.; 12.04.2011, 16:43. Reason: Formatierung

        Comment


        • #5
          Originally posted by flarno11 View Post
          unglaublich informativ deine antwort
          Deine Frage war ja auch unglaublich präzise! Vlt. solltest du mal eher überlegen wie man Fragen richtig stellt!

          Ansonsten ist es recht simpel:
          [highlight=sql]
          select articleId
          from <Verbindungstabelle >
          where categoryId in ('cat1', 'cat2', 'cat3')
          group by articleId
          having count(distinct categoryId) = 3
          [/highlight]

          @Martin R: Sorry, entspricht wohl deiner Lösung, aber dein Statement mit dem Subselect und mehrfach OR war mir zu kompliziert

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Noch einfacher,

            SELECT
            distinct articleId FROM <Verbindungstabelle >WHERE categoryId IN ('cat1', 'cat2', 'cat3')

            Außerdem müssen ja nicht unbedingt alle 3 Kategorien vorkommen, deshalb ist das mit dem count etwas unsicher.

            Gruß
            docendo discimus

            Comment


            • #7
              Originally posted by frauwue View Post
              ...Außerdem müssen ja nicht unbedingt alle 3 Kategorien vorkommen, deshalb ist das mit dem count etwas unsicher.
              Es geht doch aber gerade darum, dass ALLE DREI Kategorien zugeordnet sein MÜSSEN.

              In diesem Beispiel waere das nur A1, nicht aber A2 da dieser cat3 nicht hat.
              Deine Abfrage würde jedoch auch A2 und A3 selektieren, also jeden der irgendeiner der drei Kategorien zugeordnet ist.

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Ja stimmt,

                sorry, ich hab's wohl nicht ordentlich durchgelesen.
                docendo discimus

                Comment


                • #9
                  Originally posted by Falk Prüfer View Post
                  Deine Frage war ja auch unglaublich präzise! Vlt. solltest du mal eher überlegen wie man Fragen richtig stellt!
                  Ist ja überhaupt nicht spitzfindig. Schon mal überlegt dass nicht alle deutsch als Muttersprache haben?

                  Trotzdem danke..

                  Comment

                  Working...
                  X