具有计数意外结果的MySQL连接查询
我不确定我的逻辑在这个问题上是否正确。我有一个表具有计数意外结果的MySQL连接查询,mysql,left-join,Mysql,Left Join,我不确定我的逻辑在这个问题上是否正确。我有一个表Documents,其中每个项目都有一个唯一的ID和文档的名称。然后我有另一个表DocVotes,它存储用户对文档的投票(每个记录一票)。有一个字段vote,它是一个BOOL(1表示是,0表示否) 我试图检查某个特定的用户MemberID以前是否对文档进行过投票,显然您不能对自己的文档进行投票(通过排除AuthorID进行检查) 这是我正在尝试的问题 SELECT d.ID, d.Name, COUNT(dv.MemberID) FROM Doc
Documents
,其中每个项目都有一个唯一的ID和文档的名称。然后我有另一个表DocVotes
,它存储用户对文档的投票(每个记录一票)。有一个字段vote
,它是一个BOOL
(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
选择d.ID、d.Name、COUNT(dv.MemberID)
从作为d的文件中删除
在dv.ItemID=d.ID上以dv的形式左键连接文档
和dv.MemberID=32
其中d.状态=‘建议’
和d.d.32
我认为它应该做的是:获取ID
,Name
,然后计算MemberID
(在本例中为32)所投的票数,然后简单地检查计数,如果计数为0,则表示用户尚未投票,如果为1,则表示他们已经投票(您只能投票一次)
然而,我得到了6票,但是这个用户对这个特定文档只投了1票。所以很明显,这比那条记录还重要。。。(我只回了一排)
想法?请注意评论中的内容: 尝试使用
按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
选择d.ID、d.Name、COUNT(dv.MemberID)
从作为d的文件中删除
在dv.ItemID=d.ID上以dv的形式左键连接文档
和dv.MemberID=32
其中d.状态=‘建议’
和d.d.32
分组
d、 身份证
您可能需要1)一把小提琴,这样我们就可以检查2)一个分组依据
我实际上刚刚试过,我得到了6行预期结果。我省略了d.ID的组,现在它工作得很好。总是显而易见的让我们。。。谢谢,很好!我把它写在答案中,这样问题就可以标记为已回答。