0

不确定我的逻辑在这个问题上是否正确。我有一个表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

我认为它应该做什么:获取ID, Name, 并计算投票的数量MemberID(在这种情况下为 32)然后简单地检查计数,如果计数为 0 那么这意味着用户还没有投票,如果1 然后他们有(您只能投票一次)。

但是,我得到了 6 的计数,但该用户仅在此特定文档上投了 1 票。所以很明显,这比那个条目更重要......(我只得到 1 行回来)

想法?

4

1 回答 1

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
于 2013-03-19T05:17:46.720 回答