我正在为在线购买和评级服务建模,并有两个表:
Bought (UserID, ItemID)
Rating (UserID, ItemID, Rating)
我想要归还那些在第一张桌子而不在第二张桌子上的人,即那些已经购买但是没有评价的人。
到目前为止我已经:
SELECT
user,
item
FROM Buys
where item NOT IN (SELECT Item FROM Rates);
但这只会让那些购买了根本没有评级的商品的用户返回。一旦其他人评价该项目,它就不再返回。
您如何指定:
SELECT
user,
item
FROM Buys
where item **& user** NOT IN (SELECT Item **& User** FROM Rates);
答案 0 :(得分:1)
试试这个:
SELECT *
FROM Bought B
WHERE NOT EXISTS
(
SELECT *
FROM Rating R
WHERE B.UserID = R.UserID AND B.ItemID = R.ItemID
)
答案 1 :(得分:0)
您需要过滤UserID
而不是ItemID
。此外,您不需要同时过滤UserID
和ItemID
,以查找未对任何产品评分的用户
SELECT user,item
FROM Buys B
where not exists
(
SELECT 1
FROM Rates R
where B.UserID =R.UserID
)
答案 2 :(得分:0)