鉴于此样本数据集:
item
----
item_id item_name item_added
1 Apple <date_time>
2 Banana <date_time>
user
----
user_id user_name
1 Alice
2 Bob
3 Carol
rating
------
rating_id item_id user_id rating_value
1 1 1 3
2 1 2 4
3 1 3 5
4 2 1 5
5 2 2 2
我有这个查询来确定哪些项目只缺少一个评级:
SELECT item.*,
COUNT(rating_value) AS rating_count
FROM item
LEFT JOIN rating ON item.item_id = rating.item_id
GROUP BY item_id
HAVING rating_count = 2
ORDER BY item_name
如何修改此查询以显示仅缺少Carol评级的项目? rating_count行不是必需的。唯一必要的列是item_id和item_name。
谢谢。
答案 0 :(得分:4)
Select ...
From item
Left Join rating
On rating.item_id = item.item_id
And rating.user_id = 3
Where rating.rating_id Is Null
Order By item.item_name
如果您仍想要评分数据,请参阅另一种表格:
Select ...
From item
Left Join rating
On rating.item_id = item.item_id
Where Not Exists (
Select 1
From rating As R1
Where R1.item_id = item.item_id
And R1.user_id = 3
)
Order By item.item_name
答案 1 :(得分:1)
这将输出仅缺少Carol评级的项目(user_id = 3需要作为参数传递):
SELECT item.*, COUNT(rating.rating_value) AS rating_count
FROM item INNER JOIN rating ON item.item_id = rating.item_id AND
(3 NOT IN (SELECT r.user_id FROM rating AS r
WHERE r.item_id = rating.item_id))
GROUP BY item_id
HAVING rating_count = 2 /* (2 = number of users - 1) */
ORDER BY item_name;
你必须用item
替换所有movie
,但你的查询混合了项目和电影,而表格是项目,所以我用项目进行了查询,我只是在查询中看到电影太晚了。