SQL NOT IN Query

0

Может ли кто-нибудь помочь мне с этим запросом 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

Я пытаюсь присоединиться, где ProductID не находится в таблице livefeed за последние 30 дней и где storeid не находится в таблице livefeed за последние 6 часов, но, похоже, он не работает. Любая идея, что я делаю неправильно?

  • 0
    Обновленный ответ на основе вашего комментария
Теги:
subquery
notin

2 ответа

3
Лучший ответ

С первого взгляда кажется, что ваш первый подзапрос должен выбрать ProductID, а не LiveFeedID, а ваш второй подзапрос должен выбрать StoreID not LiveFeedID

  • 0
    аааа ты прав! Я знал, что это было что-то простое, что мне не хватало! Спасибо!
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 в запросе?
  • 0
    Только 1? Тэк LIMIT 1 до конца. Но мне нужно знать больше о том, как определить, какой конкретный storeid вернуть ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню