Right Join



  • Hallo,

    ich hab ein kleines Problem, ich hab mir ne Datenbank geschrieben, die hat zwei Tabelle...

    tab_Band (Bands von meinem Musikarchiv)
    Struktur:
    +-----------+--------------+------+-----+------------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +-----------+--------------+------+-----+------------+----------------+
    | BandLfdNr | int(11) | | PRI | NULL | auto_increment |
    | BandName | varchar(255) | | | | |
    | BandDate | date | | | 0000-00-00 | |
    | BandTime | time | | | 00:00:00 | |
    | BandGenre | varchar(255) | | | | |
    +-----------+--------------+------+-----+------------+----------------+

    tab_Alben (Alben von jeder Band)
    Struktur:
    +--------------------+--------------+------+-----+-----------------+------------
    | Field | Type | Null | Key | Default | Extra
    +--------------------+--------------+------+-----+-----------------+------------
    | AlbenLfdNr | int(11) | | PRI | NULL | auto_increm
    | AlbenName | varchar(255) | YES | | NULL |
    | BandAlbum | int(11) | YES | | NULL |
    | AlbenDate | date | YES | | NULL |
    | AlbenTime | time | YES | | NULL |
    | AlbenMetalArchivID | varchar(255) | | | keine Angaben |
    | AlbenRating | varchar(255) | | | keine Bewertung |
    +-------------------------------------------------------------------------------

    BandAlbum beinhaltet den Primärschlüssel der Band wo das Album hinzugehört, nur wenn ich jetzt solch eine Abfrage mache:

    SELECT BandLfdNr, BandName FROM tab_bands RIGHT JOIN tab_alben ON BandAlbum = BandLfdNr;

    Die ausgabe sieht momentan dann bei mir so aus....
    +-----------+-------------+|
    BandLfdNr | BandName
    |+-----------+-------------+|
    3 | Aaskereia ||
    1 | 1349 ||
    1 | 1349 ||
    141 | Iron Maiden ||
    141 | Iron Maiden ||
    141 | Iron Maiden ||
    141 | Iron Maiden ||
    141 | Iron Maiden ||
    141 | Iron Maiden ||
    141 | Iron Maiden ||
    141 | Iron Maiden ||
    141 | Iron Maiden ||
    141 | Iron Maiden ||
    141 | Iron Maiden ||
    141 | Iron Maiden ||
    72 | Darkthrone ||
    72 | Darkthrone ||
    72 | Darkthrone ||
    72 | Darkthrone ||
    72 | Darkthrone ||
    72 | Darkthrone ||
    72 | Darkthrone ||
    72 | Darkthrone ||
    72 | Darkthrone ||
    72 | Darkthrone ||
    72 | Darkthrone ||
    72 | Darkthrone ||
    72 | Darkthrone |
    +-----------+-------------+

    ich möchte aber nur alle alben von Iron Maiden oder halt der Band nach der ich evetuell suchen könnte, ich danke für eure hilfe.

    btw: hab natürlich schon versucht ne where-klausel einzubinde, das funktioniert bei mir irgendwie net, aber der Computer hat schliesslich "immmer" schuld :p

    M.f.G Frostilein



  • "SELECT b.BandName,a.AlbunLfdNr, a.AlbenName
     FROM tab_Alben a LEFT JOIN tab_Band b ON b.BandLfdNr=a.BandAlbum
     WHERE b.BandName LIKE 'Iron%'"
    

    Das würde dir alle Alben, aller Bands liefern, die mit "Iron" beginnen...

    Also ich arbeite eigendlich immer mit LEFT JOIN (der Rest ist mir zu unlogisch/nicht geläufig 😉 )
    Da gehst du immer von der Tabelle aus, von der du etwas wissen willst und Joinst die mit den "Detail-Info-Tabellen"
    Also in diesem Fall möchtest du
    alle Alben habe
    +Bandname
    +nur von bestimmten Bands



  • jo, super... so wollte ich das haben, genau so 😉

    komisch ist nur, das ich das auch so mal versucht habe, hat aber nie hingehauen, naja. Aber egal, Problem gelöst. DANKE!!!



  • Vielleicht noch ein Tip am Rande: Das BandGenre würde ich eine eigene Tabelle auslagern.



  • stimmt, redudante daten vermeiden, oder wie war das noch in schule? 🙄

    Gruß Frostilein



  • Exakt. 😃


Anmelden zum Antworten