Join bei n:m-Bezeihung

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

  • Join bei n:m-Bezeihung

    Hallo,
    ich habe folgende Anfrage an meine Tabellen.

    select Titel,Nachname from tbl_filme,tbl_rel,tbl_darsteller where tbl_filme.filmID=tbl_rel.filmID and tbl_rel.darstellerID=tbl_darstellerdarstellerID

    tbl_filme
    TitelID
    Titel

    tbl_rel
    TitelID
    DarstellerID

    tbl_darsteller
    DarstellerID
    Nachname

    Jetzt kann es vorkommen, dass die Darsteller nicht eingepflegt sind, aber die Titel angezeigt werden müssen.
    Das habe ich mit einem left join versucht.

    SELECT Titel, Nachname
    FROM tbl_darsteller, tbl_filme
    LEFT JOIN tbl_rel ON tbl_filme.filmID = tbl_rel.filmID
    WHERE tbl_rel.darstellerID = tbl_darsteller.darstellerID

    Geht nicht wegen der where-Klausel.
    Weiß einer einen tipp?
    Zuletzt geändert von Wurzelbohrer; 10.03.2003, 09:13.

  • #2
    mein Tipp: nochn nonrestrictive join ...

    SELECT f.Titel, IF(d.darstellerID, concat(Nachname, ', ', Vorname), '<i>kein Darsteller</i>') as Darsteller
    FROM tbl_filme f
    LEFT JOIN tbl_rel r ON r.filmID = f.filmID
    LEFT JOIN tbl_darsteller d ON d.darstellerID=r.darstellerID

    Dann kriegst du für jeden Film ohne Darsteller genau eine Zeile.
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Original geschrieben von Titus
      mein Tipp: nochn nonrestrictive join ...

      SELECT f.Titel, IF(d.darstellerID, concat(Nachname, ', ', Vorname), '<i>kein Darsteller</i>') as Darsteller
      FROM tbl_filme f
      LEFT JOIN tbl_rel r ON r.filmID = f.filmID
      LEFT JOIN tbl_darsteller d ON d.darstellerID=r.darstellerID

      Dann kriegst du für jeden Film ohne Darsteller genau eine Zeile.
      Hallo Titus,
      danke für die schnelle Antwort.
      Was bedeutet denn f und z.B. r vor ON ?
      Habe Null Erfahrung, joins in der Form habe ich noch nie gesehen.

      THX

      Kommentar


      • #4
        das sind aliase für die entsprechenden tabellennamen.

        ein 'r' ist doch schneller getippt als ein 'tbl_rel' wir sind doch alle faul.

        und daher verwende ich auch USING, wenn die spaltennamen in beiden tabellen identisch sind.
        Code:
        SELECT  f.Titel,
                IF(d.darstellerID, concat(Nachname, ', ', Vorname), '<i>kein Darsteller</i>') as Darsteller
        
        FROM    tbl_filme f
                  LEFT JOIN tbl_rel r USING(filmID)
                    LEFT JOIN tbl_darsteller d USING(darstellerID)
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          und wieder was dazu gelernt ... danke Abraxas.
          mein Sport: mein Frühstück: meine Arbeit:

          Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

          Kommentar


          • #6
            Original geschrieben von Titus
            [...] Abraxas.
            mit x am ende bitte...

            aber dennoch gern geschehen.... man lernt ja bekanntlich nicht aus.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar

            Lädt...
            X