当我在该查询中使用!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 |
-------------------------------------------
答案 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。