2014-02-06 50 views
0

的表是:SQL - 在同一列中加入3個表

blogs 
blog_id, user_id, blog_content 

users 
user_id, user_name 

comments 
comment_id, blog_id, user_id, comment_content 

我想要做的就是在:blog_content,創建了博客的人的USER_NAME,與相關的COMMENT_CONTENT特定博客以及評論作者的user_name。我不知道如何獲得最後一個,評論作家的USER_NAME。我有這個至今:

SELECT blogs.user_id, blogs.blog_id, blogs.blog_content, 
      users.user_id, users.name, 
      comments.comment_id, comments.blog_id, comments.user_id, comments.comment_content 
      FROM blogs 
      LEFT JOIN users ON users.user_id = blogs.user_id 
      LEFT JOIN comments ON comments.blog_id = blogs.blog_id 
      WHERE blogs.blog_id = 2 

我該怎麼也湊這個查詢表的評論和用戶,並獲得博客創建者無論是USER_NAME,以及評論的作家?

回答

0

你可以有多個連接在同一個表。每個連接都將從該表中檢索另一組數據。爲了包括在同一個表在單個查詢多次,您必須對副本中的至少一個創建alias,使SQL知道你是指試圖從他們的列中檢索數據時要哪一個。

既然你需要得到用戶名是誰寫的評論的用戶,我會建議在用戶重新加入表,如下所示:

SELECT blogs.user_id, 
     blogs.blog_id, 
     blogs.blog_content, 
     users.user_id, 
     users.name, 
     comments.comment_id, 
     comments.blog_id, 
     comments.user_id, 
     comments.comment_content , 
     comment_writers.name as CommentUserName 
FROM blogs 
LEFT JOIN users ON users.user_id = blogs.user_id 
LEFT JOIN comments ON comments.blog_id = blogs.blog_id 
LEFT JOIN users AS comment_writers ON comment_writers.user_id = comments.user_id 
WHERE blogs.blog_id = 2 
0
SELECT blogs.user_id, blogs.blog_id, blogs.blog_content, 
      users.user_id, users.name, 
      comments.comment_id, comments.blog_id, comments.user_id, comments.comment_content 
      FROM blogs 
      LEFT JOIN users ON users.user_id = blogs.user_id 
      LEFT JOIN comments ON comments.blog_id = blogs.blog_id 
      LEFT JOIN comments c ON c.user_id=users.user_id 
      WHERE blogs.blog_id = 2 

您可以再次做加盟評論這張桌子給它的別名,從以往的評論表區分開來。

+0

的問題是問如何獲得評論作者的用戶名。他已經獲取他從'comments'表需要和不需要包括它的第二個副本的一切。 –

1

你需要加入意見表背到用戶表的另一個副本:

SELECT b.user_id, b.blog_id, b.blog_content, 
     u.user_id, u.name, 
     c.comment_id, c.blog_id, c.user_id, c.comment_content , 
     uc.name as commentor_name 
FROM blogs b LEFT JOIN 
    users u 
    ON u.user_id = b.user_id LEFT JOIN 
    comments c 
    ON c.blog_id = b.blog_id LEFT JOIN 
    comments uc 
    on c.user_id = uc.user_id 
WHERE b.blog_id = 2; 

在此查詢中,所有表都表的別名。這有助於使查詢更具可讀性。另外,還需要對錶的別名到兩個引用區分users。一個參考是針對博客所有者,另一個參考針對評論作者。