SQLite没有获得双重数据

时间:2014-05-28 21:57:40

标签: sql sqlite group-by distinct

我有评级系统,人们可以根据想法评分。用户可以从SQLite数据库中获取他尚未投票的想法的摘要。我的问题是数据库仍然得到他已经投票的想法。我的查询必须运行的表如下所示:

ID (pk), ratingScore, userID, ideaID  
1         3           1       1
2         4           2       1
3         5           2       2

评分得分是用户提出想法的得分,userID是投票用户的ID,ideaID是想法的ID。

如何在没有获得其他想法的情况下从用户1获取他未投票的想法,因此此表上的查询结果将只是'ideaID 2'。

SELECT Ratings.ideaID
FROM Ratings
WHERE (NOT(Ratings.userID)=1)
GROUP BY ideaID;

这是我尝试的,但它没有用,我也试过DISTINCT,但这也不起作用。

2 个答案:

答案 0 :(得分:1)

您需要获取所有提示的列表,然后将其加入到您的表中,如下所示:

SELECT ideas.ideaID
FROM (SELECT DISTINCT ideaID FROM Ratings) ideas LEFT JOIN 
Ratings r ON r.ideaID = ideas.ideaID AND r.userID=1 
WHERE r.ideaID IS NULL;

上面的示例将为您提供单个用户的未投票想法列表。

答案 1 :(得分:1)

假设您有一个Ideas表,您可以使用这样的相关子查询来查找对该用户没有评级的想法:

SELECT ID
FROM Ideas
WHERE NOT EXISTS (SELECT 1
                  FROM Ratings
                  WHERE userID = 1
                    AND ideaID = Ideas.ID)

(如果有任何想法没有被任何用户评价,那么从Ratings表中读取想法就会失败。)