2010-03-17 30 views
0

我正在嘗試編寫連接3個表的查詢。當1個表是emty時SQL連接3個表

第一張桌子是關於每個節日的信息。 第二張表是每個節日的票數。 第三張表是每個節日的評論。

我想加入所有3個表格,所以我得到了table1中的所有列,將table1與tableid上的table2結合在一起,但是我還需要計算表3中適用於每個節日的記錄數。

前兩張表給了我一個結果,因爲他們都有數據,但表3是空的,因爲還沒有評論,所以添加到我的查詢沒有結果。

SELECT f.*, 
     v.total, 
     v.votes, 
     v.festivalid, 
     r.reviewcount as count 
    FROM festivals f 
INNER 
    JOIN vote v 
     ON f.festivalid = v.festivalid 
INNER 
    JOIN (SELECT festivalid, 
       count(*) as reviewcount 
      FROM reviews) 
      GROUP BY festivalid) as r 

     on r.festivalid = v.festivalid 

回答

2
SELECT f.*, 
     v.total, 
     v.votes, 
     v.festivalid, 
     ifnull(r.reviewcount,0) as count 
    FROM festivals f 
INNER 
    JOIN vote v 
     ON f.festivalid = v.festivalid 
LEFT OUTER 
    JOIN (SELECT festivalid, 
       count(*) as reviewcount 
      FROM reviews) 
      GROUP BY festivalid) as r 

     on r.festivalid = v.festivalid 

添加IFNULL顯示評論爲0沒有的情況下。

+0

非常感謝。 ifnull解決了我遇到的另一個問題 – AdRock 2010-03-17 13:49:02

3
LEFT OUTER JOIN 

例如

SELECT f.*, 
     v.total, 
     v.votes, 
     v.festivalid, 
     r.reviewcount as count 
    FROM festivals f 
INNER 
    JOIN vote v 
     ON f.festivalid = v.festivalid 
LEFT OUTER 
    JOIN (SELECT festivalid, 
       count(*) as reviewcount 
      FROM reviews 
      GROUP BY festivalid) as r 

     on r.festivalid = v.festivalid 
+0

而且,任何一個我嘗試我得到這個錯誤 「每個派生的表必須有它自己的別名」 – AdRock 2010-03-17 13:40:00

+0

對不起,這似乎是在原來的查詢時出現錯誤。 「FROM reviews」之後的「)」。我糾正了我的。 – 2010-03-17 13:57:53

1

第二次連接不應該是內部連接。

SELECT f.*, 
      v.total, 
      v.votes, 
      v.festivalid, 
      r.reviewcount as count 
     FROM festivals f 
    INNER 
     JOIN vote v 
      ON f.festivalid = v.festivalid 
    LEFT OUTER 
     JOIN (SELECT festivalid, 
        count(*) as reviewcount 
       FROM reviews 
       GROUP BY festivalid) as r 

      on r.festivalid = v.festivalid 

文章外連接: http://msdn.microsoft.com/en-us/library/ms187518.aspx

+0

+1。一個右括號太多(在FROM之後)。另外如果不需要NULL,應該在select子句中使用'COALESCE(r.reviewcount,0)count' – van 2010-03-17 13:32:26

+0

非常感謝....刪除了合適的分項,現在可以運行 – AdRock 2010-03-17 13:43:30

0

請嘗試使用您的評論數表外連接(R)

SELECT f.*, 
     v.total, 
     v.votes, 
     v.festivalid, 
     r.reviewcount as count 
    FROM festivals f 
INNER 
    JOIN vote v 
     ON f.festivalid = v.festivalid 
LEFT OUTER 
    JOIN (SELECT festivalid, 
       count(*) as reviewcount 
      FROM reviews) 
      GROUP BY festivalid) as r 
     on r.festivalid = v.festivalid