Item_allany_subselect
是继承自Item_in_subselect
。所有
/任何
/一些
使用相同的算法(相同的方法Item_in_subselect
)作为标量在
,但使用不同的函数,而不是=
。
任何
/一些
使用相同的函数,是上市后左边的表达式。
所有
使用一个倒置的函数,子查询作为参数传递Item_func_not_all
(Item_func_not_all
是一种特殊的不
函数用于优化,见后)。
但在上述转换的独立能力所有
/任何
/一些
优化将检查(查询是独立的操作之一<
,= <
,>
,> =
,返回正确零
没有意义(顶级的在哪里
条款),这不是行子查询)。
对于这样的查询,以下转换可以做:
val >所有(选择…)- > val > MAX(选择…)val <所有(选择…)- > val < MIN(选择…)val >任何(选择…)- > val > MIN(选择…)val <任何(选择…)- > val <马克斯(选择…)val =(选择…)- > val > = MAX(选择…)val < =所有(选择…)- > val < = MIN(选择…)val > =任何(选择…)- > val > = MIN(选择…)val任何(选择…)- > < = val < = MAX(选择…)
所有
子查询已经不
在他们面前。这个问题可以解决特殊的帮助不
可以把“高级”标签,它的参数和正确的过程零
如果是“顶级”项目(如果参数是返回TRUE零
如果是“顶级”项)。我们叫这个操作_NOT_
。然后我们将下表的转换:
val >所有(选择…)- > _NOT_ val > = MAX(选择…)val <所有(选择…)- > _NOT_ val < = MIN(选择…)val >任何(选择…)- > val < MIN(选择…)val <任何(选择…)- > val > MAX(选择…)val > =(选择…)- > _NOT_ val > MAX(选择…)val < =所有(选择…)- > _NOT_ val < MIN(选择…)val > =任何(选择…)- > val < = MIN(选择…)val任何(选择…)- > < = val > = MAX(选择…)
如果子查询不包含分组和聚合函数,子查询可以被重写MAX ()
/MIN ()
聚合函数,例如:
val >任何(选择项…)- > val <(选择最小(项)…)
查询与聚合函数和/或分组,特别Item_maxmin_subselect
就会被使用。这个查询将返回的最大(最小)值的结果集。