2009-11-23 76 views
0

任何人都可以帮助我解决这个MySQL查询吗?SQL NOT IN查询

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 

我想加盟ProductID等于不在livefeed表在过去30天,其中STOREID不是在最后6小时livefeed表,但它似乎并不奏效。任何想法我做错了什么?

+0

更新的答案基于您的评论 – 2009-11-23 07:20:27

回答

3

一目了然,这样看来,你的第一个子查询,应选择ProductID,不LiveFeedID和您的第二子查询,应选择StoreIDLiveFeedID

+0

啊啊啊你是正确的!我知道这很简单,我错过了!谢谢! – mike 2009-11-23 06:09:54

3

我太晚了:

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 
+0

谢谢!有没有简单的方法只允许查询中的一个storeID? – mike 2009-11-23 06:15:16

+0

只有1个?确定'LIMIT 1'到最后。但是,我需要更多地了解如何确定要返回哪个特定的店铺... – 2009-11-23 06:20:35

+0

那么,现在查询,它会从同一商店返回多个产品ID。我需要查询中每个storeid的限制为1。我正在尝试为每家商店获得最高折扣。 – mike 2009-11-23 06:23:28