【问题标题】:SQL row in one table not in another multiple fields一个表中的 SQL 行不在另一个多个字段中
【发布时间】:2015-03-11 09:21:26
【问题描述】:

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

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

【问题讨论】:

  • 请提供示例输出。

标签: mysql sql-server


【解决方案1】:

试试这个:

SELECT *
FROM Bought B
WHERE NOT EXISTS 
(
   SELECT *
   FROM Rating R
   WHERE B.UserID = R.UserID AND B.ItemID = R.ItemID
)

【讨论】:

    【解决方案2】:

    您需要过滤 UserID 而不是 ItemID。此外,您无需同时过滤 UserIDItemID 来查找未评价任何产品的用户

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

    【讨论】:

      【解决方案3】:

      对于 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
      

      【讨论】:

        猜你喜欢
        • 2017-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多