用户名: 密码: 验证码:           网站地图 高级搜索 RSS订阅 收藏本站
Google
您的位置:首页>>网络编程>>Mysql>>阅读资讯:MySQL 数据库中对子查询的限制

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

[ 来源: | 阅读:次 | 更新日期:2007-9-29 20:08:50 | 评论 0 条 | 我要投稿 ]

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

字串8

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

仅部分支持行比较操作: www.yueluo.net

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

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

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

字串8

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

字串5

但不支持: 月落

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

字串5

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

月落

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

(col1, col2, ...) = (val1, val2, ...)
col1 = val1 AND col2 = val2 AND ... 字串9

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

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

字串8

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

yueluo.net

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

DELETE FROM t WHERE ... (SELECT ... FROM t ...);
UPDATE t ... WHERE col = (SELECT ... FROM t ...);
{INSERT|REPLACE} INTO t (SELECT ... FROM t ...);

字串7

例外:如果为FROM子句中更改的表使用子查询,前述禁令将不再适用。例如:

字串9

UPDATE t ... WHERE col =
(SELECT (SELECT ... FROM t...) AS _t ...); 字串6

禁令在此不适用,这是因为FROM中的子查询已被具体化为临时表,因此“t”中的相关行已在满足“t”条件的情况下、在更新时被选中。 月落

与子查询相比,针对联合的优化程序更成熟,因此,在很多情况下,如果将其改写为join(联合),使用子查询的语句能够更有效地执行。

共2页: 上一页 1 [2] 下一页
Tags:MySQL,数据库,子查询
责任编辑:
您的评论
用户名:新注册) 密码: 匿名评论 [所有评论]

·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为