2016-06-21 83 views
0

我想要提取所有討論並添加所有UserDiscussion行的列數,其中'bookmarked'列在討論中爲真。MySQL加入count並且其中

Table: Discussion 
----------------- 
DiscussionID 
Name 
..... 


Table: UserDiscussion 
--------------------- 
UserID 
DiscussionID 
Bookmarked (Boolean) 

這是我的查詢,但它是不正確的:

SELECT d.*, COUNT(*) as BookmarkCount 
FROM Discussion d 
LEFT JOIN UserDiscussion ud 
ON ud.DiscussionID = d.DiscussionID 
WHERE ud.Bookmarked = true; 

回答

1

寫正確的方法是:

SELECT d.*, COUNT(ud.DiscussionID) as BookmarkCount 
FROM Discussion d LEFT JOIN 
    UserDiscussion ud 
    ON ud.DiscussionID = d.DiscussionID AND 
     ud.Bookmarked = true 
GROUP BY d.DiscussionId; 

的變化是:

  • 使用COUNT()上的字段從表。這將計算匹配的次數。 COUNT(*)永遠不會返回0,在這種情況下(該組將被過濾掉)。
  • WHERE條件移至ON條款。否則,WHERE條件會過濾出NULL值,將LEFT JOIN變爲內部聯接。
  • 添加GROUP BY子句,以便每個討論ID獲得一行。

注意:分組DiscussionId沒問題,假設它是Discussion上的主鍵。一般來說,最好在SELECTGROUP BY中包含所有未聚集的色譜柱。但是,當GROUP BY由主鍵/唯一鍵時,它是可以的(並且符合ANSI SQL)。

+0

...和您的服務器的規則允許它。 – Strawberry