Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有计数意外结果的MySQL连接查询_Mysql_Left Join - Fatal编程技术网

具有计数意外结果的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的
组,现在它工作得很好。总是显而易见的让我们。。。谢谢,很好!我把它写在答案中,这样问题就可以标记为已回答。