[原创]sql中出现的错误总结_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4505 | 回复: 0   主题: [原创]sql中出现的错误总结        上一篇   下一篇 
鲲鹏展翅
注册用户
等级:少校
经验:1148
发帖:79
精华:9
注册:2012-11-19
状态:离线
发送短消息息给鲲鹏展翅 加好友    发送短消息息给鲲鹏展翅 发消息
发表于: IP:您无权察看 2012-11-22 8:54:34 | [全部帖] [楼主帖] 楼主

/*以下错误只适用于子查询。本节把这些错误归在一起*/

/*

1.查询时,操作数多于一个,原因:用于查询的字段是一个子查询,并且结果集中包含多个字段,解决方法是用行子查询

2.查询时,返回结果多于一行,原因:where后边的子查询返回的结果集多于一行,解决方法:把where后边的=改成in 或在=后边加上any

3.更新时,子查询的数据表和外部的数据表是同一张表

*/

/*1.来自子查询的列的数目不正确:

·                ERROR 1241 (ER_OPERAND_COL)

·                SQLSTATE = 21000

·                Message = "Operand should contain 1 column(s)"

在出现以下情况时,发生此错误:

SELECT (SELECT column1, column2 FROM t2) FROM t1;

如果您的目的是进行比较,您可以使用能返回多个列的子查询.不过,在其它的语境下,子查询必须为标量操作数。*/

/*下面这个sql语句就是进行两张表的对比的:查询出两张表中记录完全相同的记录*/

SELECT s1,s2

FROM t1

WHERE (s1,s2) IN (

SELECT s1,s2

FROM t2

);

/*2.来自子查询的行的数目不正确:

·                ERROR 1242 (ER_SUBSELECT_NO_1_ROW)

·                SQLSTATE = 21000

·                Message = "Subquery returns more than 1 row"

如果在语句中,子查询返回的行多于一个,则发生此错误。请考虑以下例子:

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

如果SELECT column1 FROM t2只返回一行,则将执行以前的查询。如果子查询返回的行多于一个,则将出现错误1242。在这种情况下,该查询将被改写为:

SELECT * FROM t1 WHERE column1 = ANY (SELECT column1 FROM t2);

*/

SELECT s1,s2

FROM t1

WHERE s2 IN (

SELECT s2 FROM t2

);

SELECT s1,s2

FROM t1

WHERE s2 = ANY(

SELECT s2 FROM t2

);

/*3.在子查询中表格使用不正确:

·                Error 1093 (ER_UPDATE_TABLE_USED)

·                SQLSTATE = HY000

·                Message = "You can't specify target table 'x'

·                for update in FROM clause"

在如下情况下,发生该错误:

UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);

和SELECT语句一样,在UPDATE和DELETE语句中,子查询是合法的。所以您可以在UPDATE语句中使用子查询进行赋值。不过,您不能把同一个表(在本例中为表t1)

既用于子查询的FROM子句,又用于更新目标*/

UPDATE t1 SET s2 = (SELECT MAX(s2) FROM t1);

/*对于事务存储引擎,子查询的错误会导致整个语句失效。对于非事务存储引擎,在遇到错误之前进行的数据修订会被保留*/




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论