13.2 Item_allany_subselect

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就会被使用。这个查询将返回的最大(最小)值的结果集。