一个表中的SQL行不在另一个多个字段中

时间:2015-03-11 09:21:26

标签: mysql sql-server

我正在为在线购买和评级服务建模,并有两个表:

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);

3 个答案:

答案 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。此外,您不需要同时过滤UserIDItemID,以查找未对任何产品评分的用户

SELECT user,item 
FROM Buys B 
where not exists
(
SELECT 1 
FROM Rates R 
where B.UserID =R.UserID 
)

答案 2 :(得分:0)

对于sql-server使用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