带连接的 SQL 选择返回双重结果

Lan*_*ler 3 sql redundancy inner-join

我正在尝试使用连接从不同的表中选择一些数据。

首先,这是我的 SQL (MS) 查询:

SELECT Polls.pollID, 
       Members.membername, 
       Polls.polltitle, (SELECT COUNT(*) FROM PollChoices WHERE pollID=Polls.pollID) AS 'choices',
       (SELECT COUNT(*) FROM PollVotes WHERE PollVotes.pollChoiceID = PollChoices.pollChoicesID) AS 'votes'
FROM Polls
INNER JOIN Members
ON Polls.memberID = Members.memberID
INNER JOIN PollChoices
ON PollChoices.pollID = Polls.pollID;
Run Code Online (Sandbox Code Playgroud)

此查询中涉及的表在这里: 桌子

查询返回此结果:

pollID   | membername | polltitle | choices | votes
---------+------------+-----------+---------+-------
10000036 | TestName   | Test Title|   2     |   0
10000036 | TestName   | Test Title|   2     |   1
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

rad*_*dar 5

您的 INNER JOIN withPollChoices为给定的行带来了超过 1 行,poll因为投票 10000036 有 2 个选择,如choices列所示。

您可以更改要使用的查询GROUP BY并获取计数。

如果您在PollVotesorPolls表中没有每个成员的条目,则需要使用LEFT JOIN

SELECT Polls.pollID, 
       Members.membername, 
       Polls.polltitle, 
       COUNT(PollChoices.pollID) as 'choices',
       COUNT(PollVotes.pollvoteId) as 'votes'
FROM Polls
INNER JOIN Members
ON Polls.memberID = Members.memberID
INNER JOIN PollChoices
ON PollChoices.pollID = Polls.pollID
INNER JOIN PollVotes
ON PollVotes.pollChoiceID = PollChoices.pollChoicesID
AND PollVotes.memberID = Members.memberID
GROUP BY Polls.pollID, 
         Members.membername, 
         Polls.polltitle
Run Code Online (Sandbox Code Playgroud)