[转帖]sql中出现的错误小结_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2649 | 回复: 0   主题: [转帖]sql中出现的错误小结        下一篇 
    本主题由 koei 于 2014-5-2 16:21:48 移动
happy
注册用户
等级:上尉
经验:681
发帖:38
精华:0
注册:2013-4-22
状态:离线
发送短消息息给happy 加好友    发送短消息息给happy 发消息
发表于: IP:您无权察看 2013-4-25 11:30:42 | [全部帖] [楼主帖] 楼主

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

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 cant 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);
/*对于事务存储引擎,子查询的错误会导致整个语句失效。对于非事务存储引擎,在遇到错误之前进行的数据修订会被保留*/


该贴由koei转至本版2014-5-2 16:21:48



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