MySQL JOIN查询带有COUNT个意外结果

时间:2013-03-19 05:11:29

标签: mysql left-join

不确定我的逻辑在这一点上是否正常工作。我有一个表Documents,每个项目都有一个唯一的ID和文档的名称。然后我有另一个表DocVotes,用于存储用户对文档的投票(每个记录一个投票)有一个Vote字段BOOL(1表示YES,0表示NO)。

我正在尝试检查特定用户MemberID之前是否对该文档进行了投票,显然您无法对自己的文档进行投票(通过排除AuthorID进行检查)

这是我正在尝试的查询

SELECT d.ID, d.Name, COUNT(dv.MemberID) 
FROM Documents AS d
LEFT JOIN DocVotes AS dv ON dv.ItemID=d.ID
    AND dv.MemberID=32
WHERE d.Status =  'Proposed'
    AND d.AuthorID<>32

我认为它应该做什么:获取IDName,并计算MemberID投票的数量(本例中为32)然后只需检查计数和如果计数为0,那么这意味着用户尚未投票,如果是1那么他们有(你只能投票一次)。

但是我得到的数量为6,但该用户仅对此特定文档投了1票。所以很明显这只是那个条目......(我只回来了一行)

思想?

1 个答案:

答案 0 :(得分:1)

请注意评论的内容:

尝试使用GROUP BY d.ID

SELECT d.ID, d.Name, COUNT(dv.MemberID) 
FROM Documents AS d
LEFT JOIN DocVotes AS dv ON dv.ItemID=d.ID
    AND dv.MemberID=32
WHERE d.Status =  'Proposed'
    AND d.AuthorID<>32
GROUP BY
    d.ID