MYSQL delete语句不支持别名?
2015-03-18 11:07
489 查看
有一个表的数据比较大,然后需要进行关联删除,删除的时候发现如下SQL报错:
点击(此处)折叠或打开
DELETE FROM test.test1 a WHERE EXISTS (SELECT 1 FROM test.test2 b WHERE a.recordID=b.smsInfoID AND b.receiveTime <="2011-10-09
00:00:00" ) limit 1000;
报错如下:
点击(此处)折叠或打开
Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a WHERE EXISTS (SELECT 1 FROM test.test2 b WHERE a.recordID=b.smsInf' at line 1
开始以为是exists的问题,于是更改成in再测试,也报同样错:
点击(此处)折叠或打开
DELETE FROM test.test1 a WHERE a.recordid IN (SELECT b.smsInfoID FROM test.test2 b WHERE b.receiveTime <= "2011-10-09
00:00:00") LIMIT 1000;
将别名去掉就可以了,将上面两个报错的SQL更改成如下形式就可以了:
点击(此处)折叠或打开
DELETE FROM test.test1 WHERE recordid IN (SELECT smsInfoID FROM test.test2 WHERE receiveTime <= "2011-10-09
00:00:00") LIMIT 1000;
DELETE FROM test.test1 WHERE EXISTS (SELECT 1 FROM test.test2 WHERE test1.recordID=test2.smsInfoID AND test2.receiveTime <= "2011-10-09
00:00:00") LIMIT 1000;
下面支持别名的语法:
点击(此处)折叠或打开
DELETE test.a FROM test.test1 a WHERE a.recordid IN (SELECT b.smsInfoID FROM test.test2 b WHERE b.receiveTime <= "2011-10-09 00:00:00") LIMIT 1000;
点击(此处)折叠或打开
DELETE FROM test.test1 a WHERE EXISTS (SELECT 1 FROM test.test2 b WHERE a.recordID=b.smsInfoID AND b.receiveTime <="2011-10-09
00:00:00" ) limit 1000;
报错如下:
点击(此处)折叠或打开
Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a WHERE EXISTS (SELECT 1 FROM test.test2 b WHERE a.recordID=b.smsInf' at line 1
开始以为是exists的问题,于是更改成in再测试,也报同样错:
点击(此处)折叠或打开
DELETE FROM test.test1 a WHERE a.recordid IN (SELECT b.smsInfoID FROM test.test2 b WHERE b.receiveTime <= "2011-10-09
00:00:00") LIMIT 1000;
将别名去掉就可以了,将上面两个报错的SQL更改成如下形式就可以了:
点击(此处)折叠或打开
DELETE FROM test.test1 WHERE recordid IN (SELECT smsInfoID FROM test.test2 WHERE receiveTime <= "2011-10-09
00:00:00") LIMIT 1000;
DELETE FROM test.test1 WHERE EXISTS (SELECT 1 FROM test.test2 WHERE test1.recordID=test2.smsInfoID AND test2.receiveTime <= "2011-10-09
00:00:00") LIMIT 1000;
下面支持别名的语法:
点击(此处)折叠或打开
DELETE test.a FROM test.test1 a WHERE a.recordid IN (SELECT b.smsInfoID FROM test.test2 b WHERE b.receiveTime <= "2011-10-09 00:00:00") LIMIT 1000;
相关文章推荐
- MYSQL delete语句不支持别名?
- mysql delete 不支持表别名
- MySQL —— 1064错误,delete语句中 表名不能用别名
- mysql数据库delete语句不支持别名,用表名代替别名引用
- Mysql在delete时不支持别名?
- MySQL delete数据时不支持表别名
- mysql delete 语句中使用别名 alias
- mysql delete语句使用别名
- Mysql在delete时不支持别名,我也是醉了
- mysql中 delete 别名问题
- mysql支持跨表delete删除多表记录
- MySQL DELETE语句和TRUNCATE TABLE语句的区别
- mysql:21个性能优化最佳实践之17[拆分大的 DELETE 或 INSERT 语句]
- MySQL 删除数据 Delete 语句 、Truncate 语句
- Transact-SQL中Delete语句表名不能用别名?!
- MySQL删除数据Delete与Truncate语句使用比较
- mysql的函数concat的,drop语句使用、列结构、所有变量、VERSION、CURRENT_DATE、支持selec+/ USER()支持详细时间计算方法
- MySQL删除数据Delete 语句、Truncate 语句
- mysql支持跨表delete删除多表记录
- 设置 mysql ODBC 连接以支持一次执行多条SQL语句