undso: Verständnisfrage JOIN's

Beitrag lesen

Hi noch einmal, habe mir die erste Seite komplett durchgelesen,die Joins sind mir jetzt einwenig klarer.

Hab zu Testzwecken drei Tabellen angelegt:

CREATE TABLE test\_news (
  newsid int(11) NOT NULL auto_increment,
  thema varchar(250) default '',
  hits int(11) default 0,
  kommentare int(11) default 0,
  kategorie int(11) default 0,
  PRIMARY KEY  (newsid),
  INDEX  (newsid)
) ;

CREATE TABLE test\_newscomments (
  commentid int(11) NOT NULL auto_increment,
  newsid int(11) default 0,
  userid int(11) default 0,
  kommentar varchar(250) default '',
  PRIMARY KEY  (commentid),
  INDEX  (newsid)
) ;

CREATE TABLE test\_user (
  userid int(11) default 0,
  username varchar(250) default '',
  geschlecht int(11) default 0,
  PRIMARY KEY  (userid),
  INDEX  (userid)
) ;

###############################################################################

Zwei Nachrichten in die Newstabelle
INSERT INTO test\_news ( newsid , thema , hits , kommentare , kategorie ) VALUES ('', 'EU Krise', '10', '2', '3');
INSERT INTO test\_news ( newsid , thema , hits , kommentare , kategorie ) VALUES ('', 'Liebe', '5', '0', '3');

Zwei Kommentare nur für die erste News
INSERT INTO test\_newscomments ( commentid , newsid , userid , kommentar ) VALUES ('', '1', '12345', 'Das ist Schade');
INSERT INTO test\_newscomments ( commentid , newsid , userid , kommentar ) VALUES ('', '1', '67890', 'Wird schon wieder');

Zwei USer in der Usertabelle
INSERT INTO test\_user ( userid , username , geschlecht ) VALUES ('12345', 'Lisa', '1');
INSERT INTO test\_user ( userid , username , geschlecht ) VALUES ('67890', 'Udo', '2');

Folgende Joins sind mir klar. Er führt beide Tabellen zusammen, falls das Kriterium "A.newsid=B.newsid" passt. Es wird die erste News 2 Mal aufgelistet, da 2 Kommentare.
SELECT A.thema, A.hits, A.kommentare, b.kommentar, b.userid FROM test_news AS A INNER JOIN test_newscomments AS B on A.newsid=B.newsid;

Left Join. Er listet auf alle Fälle die Datensätze von der Linken Tabelle auf, falls das Kriterium "A.newsid=B.newsid" passt, fügt er noch die Kommentare dazu, ansonsten werden diese Felder mit NULL aufgefüllt. Es wird die erste News 2 Mal aufgelistet, da zwei Kommentare und einmal die zweite News mit NULL-Felder, da keine Kommentare
SELECT A.thema, A.hits, A.kommentare, b.kommentar, b.userid FROM test_news AS A LEFT JOIN test_newscomments AS B on A.newsid=B.newsid;

Wenn ich nun drei Tabellen verbinde, hakt es bei mir. Liste alle News von test_news auf. Falls Kommentare vorhanden hole noch die Kommentare mit Userangaben. Hier listet er nur die ersten Beiden News auf.
SELECT A.thema, A.hits, A.kommentare, b.kommentar, b.userid, C.username FROM test_news AS A LEFT JOIN test_newscomments AS B on A.newsid=B.newsid INNER JOIN test_user AS C on B.userid=C.userid;

Er sollte jedoch die zweite News ohne Kommentare auch auflisten.