Problem mit nem Join über 3 Tabellen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit nem Join über 3 Tabellen

    Hallo liebe Gemeinde,

    ich steh im Moment völlig auf dem Schlau mit meinem Joinversuch .

    hier die Mustertabellen
    Code:
    CREATE TABLE IF NOT EXISTS `tab_1` (
      `tab_1_id` int(20) unsigned NOT NULL auto_increment,
      `tab_1_name` varchar(100) NOT NULL,
      PRIMARY KEY  (`tab_1_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    
    CREATE TABLE IF NOT EXISTS `tab_2` (
      `tab_1_id` int(20) NOT NULL,
      `tab_3_id` int(20) NOT NULL,
      `tab_2_anzahl` mediumint(12) NOT NULL default '0',
      KEY `tab_1_id` (`tab_1_id`,`tab_3_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    CREATE TABLE IF NOT EXISTS `tab_3` (
      `tab_3_id` int(20) unsigned NOT NULL auto_increment,
      `tab_3_name` varchar(100) NOT NULL,
      PRIMARY KEY  (`tab_3_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    hier mein Joinversuch
    PHP-Code:
    $sql mysql_query("SELECT a.tab_1_name, b.tab_2_anzahl, c.tab_3_name
    FROM tab_1 a
    LEFT JOIN tab_2 b ON a.tab_1_id = b.tab_1_id
    LEFT JOIN tab_3 c ON b.tab_3_id = c.tab_3_id "
    ); 
    nun habe ich folgendes Ergebniss
    tab_1_name
    tab_3_name - tab_2_anzahl
    tab_1_name
    tab_3_name - tab_2_anzahl
    tab_1_name
    tab_3_name - tab_2_anzahl

    ich möchte es aber gerne so haben
    tab_1_name
    tab_3_name - tab_2_anzahl
    tab_3_name - tab_2_anzahl
    tab_3_name - tab_2_anzahl

    Kann mir jemand einen Tipp geben?

    vg
    gourmet

  • #2
    Mach aus dem ersten Join mal einen RIGHT JOIN.

    Kommentar


    • #3
      ich hab jetzt folgende Variationen ausprobiert

      RIGHT
      LEFT

      LEFT
      RIGHT

      RIGHT
      RIGHT

      INNER
      LEFT

      INNER
      RIGHT

      RIGHT
      INNER

      LEFT
      INNER

      INNER
      INNER

      ^^ alle bringen nur folgendes Ergebniss und nicht das gewünschte
      tab_1_name
      tab_3_name - tab_2_anzahl
      tab_1_name
      tab_3_name - tab_2_anzahl
      tab_1_name
      tab_3_name - tab_2_anzahl

      Kommentar


      • #4
        EDIT:
        Jetzt sehe ich erst, was du für ein verkorkstes Ergebnis haben willst...


        Poste dein Wunschergebnis mal mit konkreten Werten.

        Ich vermute mal du suchst nach einem Gruppenwechsel?
        Zuletzt geändert von TobiaZ; 02.09.2008, 20:07.

        Kommentar


        • #5
          mit dem Gruppenwechsel klappt es, so wie gewünscht.
          Vielen Dank für deine Unterstützung


          deinen vorherigen Post habe ich auch schon alles ausprobiert,
          ich werde es mal mit einem Subselect versuchen.

          also Beispieleinträge um es besser zu verstehen nehmen wir mal folgendes

          tab_1
          id - name
          1 - Huhn Emma
          2 - Huhn Berta
          ...

          tab_3
          id - Küken
          1 - blaues Küken
          2 - gelbes Küken
          3 - rotes Küken
          ...

          tab_2
          id_tab_1 - id_tab_3 - anzahl_küken
          1 - 1 - 4
          1 - 2 - 7
          2 - 1 - 4
          ...

          als ergebniss sollte nun folgendes rauskommen
          Huhn Emma
          4 blaue Küken
          7 gelbe küken

          Huhn Berta
          4 blaue Küken

          im Moment bekomme ich mit meiner Abfrage nur folgendes Ergebniss
          Huhn Emma
          4 blaue Küken
          Huhn Emma
          7 gelbe Küken
          Huhn Berta
          4 blaue Küken
          Zuletzt geändert von gourmet; 02.09.2008, 20:51.

          Kommentar


          • #6
            deinen vorherigen Post habe ich auch schon alles ausprobiert,
            ich werde es mal mit einem Subselect versuchen.
            Wenn der Gruppenwechsel dein gewünschtes Ergebnis bringt, dann wirst du mit keinem (vernünftigen) SQL-Query dahin kommen.

            Kommentar


            • #7
              nein , ich habe es mit meinem als erstes gepostetem join und dem Gruppenwechsel gelöst.

              Manchmal ist die Lösung so einfach, aber man kommt einfach nicht drauf

              Kommentar


              • #8
                nein
                Wieso nein? Es gibt KEINEN vernünftigen Query, der dir das ganze SQL-Seitig so bereit stellt, wie du es erwartest. Du schreibst ja selbst, dass du es (nur) mit dem Gruppenwechsel lösen konntest:
                ich habe es mit meinem als erstes gepostetem join und dem Gruppenwechsel gelöst.
                Ich weiß. Mir war am Anfang noch nicht klar, dass du die benötigten Daten schon längst hast, weil du sie falsch dargestellt hattest und eine noch falschere Darstellung erwartet hattest.

                Kommentar


                • #9
                  Original geschrieben von TobiaZ
                  Wieso nein?
                  nein -> mit Subselect oder div. anderen Selects bekommt man es nicht besser hin, also ist die Lösung mit dem Join + Gruppenwechsel für mich die beste Lösung

                  Kommentar


                  • #10
                    OK.

                    Kommentar

                    Lädt...
                    X