2009-11-23 162 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