我正在模拟在线购买和评级服务,有两个表格:
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);
试试这个:
SELECT *
FROM Bought B
WHERE NOT EXISTS
(
SELECT *
FROM Rating R
WHERE B.UserID = R.UserID AND B.ItemID = R.ItemID
)
您需要
过滤UserID
而不是ItemID
。此外,您无需过滤UserID
和ItemID
即可找到未对任何产品进行评分的用户
SELECT user,item
FROM Buys B
where not exists
(
SELECT 1
FROM Rates R
where B.UserID =R.UserID
)
对于 sql 服务器使用 EXCEPT
SELECT
user, item
FROM
Buys
EXCEPT
SELECT
user, item
FROM
Rates
对于 mysql,请使用 MINUS
SELECT
user, item
FROM
Buys
MINUS
SELECT
user, item
FROM
Rates