WEB开发网
开发学院数据库MySQL MySQL数据库中对子查询的限制 阅读

MySQL数据库中对子查询的限制

 2007-10-29 11:01:38 来源:WEB开发网   
核心提示:更正的一致缺陷:如果将NULL值与使用ALL、ANY或SOME的子查询进行比较,而且子查询返回空结果,MySQL数据库中对子查询的限制,比较操作将对NULL的非标准结果进行评估,而不是TRUE或FALSE,不能更改表,并从子查询内的相同表进行选择, 子查询的外部语句可以是SELECT、INSERT、UPDATE、DEL

更正的一致缺陷:如果将NULL值与使用ALL、ANY或SOME的子查询进行比较,而且子查询返回空结果,比较操作将对NULL的非标准结果进行评估,而不是TRUE或FALSE。

子查询的外部语句可以是SELECT、INSERT、UPDATE、DELETE、SET或DO中的任何一个。

仅部分支持行比较操作:

·对于expr IN (subquery),expr可以是n-tuple(通过行构造程序语法指定),而且子查询能返回n-tuples个行。

·对于expr op {ALL|ANY|SOME} (subquery),expr必须是标度值,子查询必须是列子查询,不能返回多列行。

换句话讲,对于返回n-tuples行的子查询,支持:

(val_1, ..., val_n) IN (subquery)

但不支持:

(val_1, ..., val_n) op {ALL|ANY|SOME} (subquery)

支持针对IN的行比较,但不支持针对其他的行比较,原因在于,IN实施是通过将其重新编写为“=”比较和AND操作的序列完成的。该方法不能用于ALL、ANY或SOME。

未良好优化行构造程序。下面的两个表达式是等效的,但只有第2个表达式能被优化:

(col1, col2, ...) = (val1, val2, ...)
col1 = val1 AND col2 = val2 AND ...

对于IN的子查询优化不如对“=”的优化那样有效。

对于不良IN性能的一种典型情况是,当子查询返回少量行,但外部查询返回将与子查询结果相比较的大量行。

FROM子句中的子查询不能与子查询有关系。在评估外部查询之前,将对它们进行具体化处理(执行以生成结果集),因此,不能按照外部查询的行对它们进行评估。

一般而言,不能更改表,并从子查询内的相同表进行选择。例如,该限制适用于具有下述形式的语句:

1 2 3  下一页

Tags:MySQL 数据库 对子

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接