反直觉的含义<任何& > SQL中的任何逻辑运算符

时间:2014-04-29 07:06:32

标签: sql

ANY直观地表示:集合中匹配的任何内容。 但是,我发现它,在两种情况下它的行为并不像预期的那样:

  

x > ANY(...)该值必须大于最小值   要评估为TRUE的列表   x < ANY(...)值必须是   小于列表中要评估为TRUE的最大值

Source

换句话说,ANY引入的子查询的整个结果必须与x进行比较,后者与ANY的含义背道而驰。 为什么会这样,或者我只是误解了<ANY&amp;的语义。 >ANY运营商?

2 个答案:

答案 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}}值,则列表中的最小值必须在逻辑上是该集合中的一个成员。