繁体   English   中英

SQL NOT IN查询

[英]SQL NOT IN Query

谁能帮我这个MySQL查询吗?

SELECT p.ProductID, 
       p.StoreID, 
       p.DiscountPercentage 
 FROM Products p 
WHERE p.IsSpecial = 1 
  AND p.SpecialDate >= date_sub(now(),interval 15 minute) 
  AND p.DiscountPercentage >= ?DiscountPercentage 
  AND p.ProductID NOT IN (SELECT lf.LiveFeedID 
                            From LiveFeed lf 
                           WHERE p.ProductID = lf.ProductID 
                             AND lf.DateAdded >= date_sub(now(),interval 30 day)) 
  AND p.StoreID NOT IN (SELECT lf.LiveFeedID 
                          From LiveFeed lf 
                         WHERE p.StoreID = lf.StoreID 
                           AND lf.DateAdded >= date_sub(now(),interval 6 hour)) 
ORDER BY p.StoreID, p.DiscountPercentage DESC

我正在尝试加入,过去30天内ProductID不在livefeed表中,而storeid过去6小时不在livefeed表中,但似乎不起作用。 知道我在做什么错吗?

乍一看,您的第一LiveFeedID查询应该选择ProductID而不是LiveFeedID而第二LiveFeedID查询应该选择StoreID而不是LiveFeedID

我为时已晚:

  SELECT p.ProductID, 
         p.StoreID, 
         p.DiscountPercentage 
    FROM Products p 
   WHERE p.IsSpecial = 1 
     AND p.SpecialDate >= date_sub(now(),interval 15 minute) 
     AND p.DiscountPercentage >= ?DiscountPercentage 
     AND p.ProductID NOT IN (SELECT lf.productid
                               FROM LIVEFEED lf
                              WHERE lf.DateAdded >= DATE_SUB(NOW(), INTERVAL 30 DAY)) 
     AND p.storeid NOT IN (SELECT lf.storeid
                             FROM LIVEFEED lf
                            WHERE lf.DateAdded >= DATE_SUB(NOW(), INTERVAL 6 HOUR)) 
ORDER BY p.StoreID, p.DiscountPercentage DESC

您正在使用EXISTS语法和相关的子查询...

我正在尝试为每家商店获得最高折扣。

在这种情况下,请使用:

  SELECT p.StoreID, 
         MAX(p.DiscountPercentage)
    FROM Products p 
   WHERE p.IsSpecial = 1 
     AND p.SpecialDate >= date_sub(now(),interval 15 minute) 
     AND p.DiscountPercentage >= ?DiscountPercentage 
     AND p.ProductID NOT IN (SELECT lf.productid
                               FROM LIVEFEED lf
                              WHERE lf.DateAdded >= DATE_SUB(NOW(), INTERVAL 30 DAY)) 
     AND p.storeid NOT IN (SELECT lf.storeid
                             FROM LIVEFEED lf
                            WHERE lf.DateAdded >= DATE_SUB(NOW(), INTERVAL 6 HOUR)) 
GROUP BY p.storeid
ORDER BY p.StoreID, p.DiscountPercentage DESC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM