ANY
直观地表示:集合中匹配的任何内容。
但是,我发现它,在两种情况下它的行为并不像预期的那样:
x > ANY(...)
该值必须大于最小值 要评估为TRUE的列表x < ANY(...)
值必须是 小于列表中要评估为TRUE的最大值
(Source)
换句话说,ANY
引入的子查询的整个结果必须与x
进行比较,后者与ANY
的含义背道而驰。
为什么会这样,或者我只是误解了<ANY
&amp;的语义。 >ANY
运营商?
答案 0 :(得分:2)
x > ANY(...)
该值必须大于列表中要评估为TRUE的最小值。
x < ANY (...)
该值必须小于列表中要评估为TRUE的最大值
以上两个语句都断言oracle可能用于比较的算法。例如。
select * from X where id > Any ( 1 , 2 , 3 , 4 , 5 )
上面代码中的可以向下钻取
id > 1 OR id > 2 OR id > 3 and so on..
所以只有id&gt; 1将断言它是真的。 (Algo Optimization)他们为x < ANY (...)
答案 1 :(得分:1)
x > ANY(...)
该值必须大于列表中要评估为TRUE
的最小值
这说明了一个结果。可能需要一些思考。 x
可能大于列表中的每个值,它仍会返回TRUE
。相反的情况可能更容易理解:
x > ANY(...)
将为FALSE
,因为它还必须小于或等于列表中的所有其他成员
或者另一种方式:
如果列表中至少有一个值x > ANY(...)
,y
大于x
,则 y
将为真。如果存在一组此类{{1}}值,则列表中的最小值必须在逻辑上是该集合中的一个成员。