【问题标题】:MySQL JOIN query with COUNT unexpected results带有 COUNT 个意外结果的 MySQL JOIN 查询
【发布时间】:2013-03-19 13:17:46
【问题描述】:

不确定我的逻辑在这个问题上是否正确。我有一个表Documents,每个项目都有一个唯一的 ID 和文档的名称。然后我有另一个表DocVotes 存储用户对文档的投票(每条记录一个投票)有一个字段VoteBOOL(1 表示是,0 表示否)。

我正在尝试检查特定用户 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 行)

想法?

【问题讨论】:

  • 您可能需要 1) 一个小提琴,以便我们检查 2) GROUP BY
  • 我实际上只是尝试过,我得到了 6 行的预期结果。我省略了GROUP BY d.ID,现在效果很好。让我们明白的总是显而易见的......谢谢。
  • 好!我把它放在答案中,以便可以将问题标记为已回答。

标签: mysql left-join


【解决方案1】:

请注意关于 cmets 的讨论:

尝试使用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

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 2016-09-10
    • 1970-01-01
    • 2016-08-29
    • 2010-09-19
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多