У меня вопрос по поводу ЛЮБОГО оператора в Oracle SQL - PullRequest
1 голос
/ 17 октября 2019

Когда я использую! ЛЮБОЙ в этом запросе, почему я получаю 2200, 2259,99, 2269,99 вместе с остальными? Разве этот запрос не должен исключать эти три значения product_name и list_price?

SELECT product_name, list_price
FROM products
WHERE list_price != ANY(
        2200, 2259.99, 2269.99
    ) AND category_id = 1
ORDER BY list_price DESC;

Возвращается:

-------------------------------------------
PRODUCT_NAME                   |LIST_PRICE|
-------------------------------------------
INTEL XEON E5-2699 V3(OEM/TRAY)|3410.46   |
INTEL XEON E5-2697 V3          |2774.98   |
INTEL XEON E5-2699 V3(OEM/TRAY)|2660.72   |
INTEL XEON E5-2697 V4          |2554.99   |
INTEL XEON E5-2685 V3(OEM/TRAY)|2501.69   |
INTEL XEON E5-2695 V3(OEM/TRAY)|2431.95   |
INTEL XEON E5-2697 V2          |2377.09   |
INTEL XEON E5-2695 V4          |2269.99   |
INTEL XEON E5-2695 V2          |2259.99   |
INTEL XEON E5-2695 V2(OEM/TRAY)|2200      |
-------------------------------------------

Ответы [ 2 ]

5 голосов
/ 17 октября 2019

list_price != ANY(2200, 2259.99, 2269.99) переводится как

   list_price <> 2200
or list_price <> 2259.99 
or list_price <> 2269.99

Вам нужно != ALL или просто NOT IN, что означает

    list_price <> 2200
and list_price <> 2259.99 
and list_price <> 2269.99
0 голосов
/ 17 октября 2019
   SELECT product_name, list_price
    FROM products p1
    WHERE  NOT ( p1.list_price = ANY ( Select  p2.list_price from products p2 where list_price 
    IN(2200, 2259.99, 2269.99) and AND category_id = 1 ))
    ORDER BY p1.list_price DESC;

Внутренний запрос возвращает IN (2200, 2259.99, 2269.99) три строки, но внешний запрос выбирает всю цену, кроме этих трех, потому что мы используем NOT в предложении where.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...