我对Oracle SQL中的ANY运算符有疑问

时间:2019-10-17 16:47:54

标签: sql oracle

当我在该查询中使用!ANY时,为什么我会得到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 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

   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)三行,但外部查询选择除这三者以外的所有价格,因为我们在where子句中使用NOT。