mysql insert into select插入表中的数据与select的数据不一样
2016-10-09 20:11
357 查看
同一个动态拼接sql的写法:
使用变量拼接sql的受影响的行为6881(错误),
不使用变量动态拼接sql的受影响的行为6916(正确)。
最后发现是用变量拼接sql中变量中有单引号影响了结果。
用双引号包住sql,问题消失。
使用变量拼接sql的受影响的行为6881(错误),
不使用变量动态拼接sql的受影响的行为6916(正确)。
最后发现是用变量拼接sql中变量中有单引号影响了结果。
用双引号包住sql,问题消失。
错误: set @monthTime=DATE_FORMAT(now(),'%Y%m'); set @clientTime_1=date_format(date_sub(now(),interval 1 day),'%Y%m%d00'); set @clientTime_2=date_format(date_sub(now(),interval 1 day),'%Y%m%d23'); set @clientTime_3=date_format(date_sub(now(),interval 3 day),'%Y%m%d00'); set @sql_into_table = concat('INSERT INTO game_center_finish_install_day_data_',@monthTime,'( num, serverTime, channel, version, packageName, appName, isCp )SELECT count(a.id) AS num, LEFT (a.clientTime, 8) AS serverTime, a.channel as channel, a.version as version, a.packageName as packageName, a.appName as appName, a.isCp as isCp FROM game_center_finish_install_log a WHERE a.pageId != 1600 AND pageId > 0 and type=1 AND a.serverTime BETWEEN ',@clientTime_1,' AND ',@clientTime_2,' AND a.clientTime BETWEEN ',@clientTime_3,' AND ',@clientTime_2, ' GROUP BY LEFT(a.clientTime,8), a.version, a.channel, a.appName, a.packageName, a.isCp'); PREPARE sql_into_table FROM @sql_into_table; EXECUTE sql_into_table;
正确: set @monthTime=DATE_FORMAT(now(),'%Y%m'); set @sql_into_table = concat("INSERT INTO game_center_finish_install_day_data_",@monthTime,"_copy ( num, serverTime, channel, version, packageName, appName, isCp )SELECT count(a.id) AS num, LEFT (a.clientTime, 8) AS serverTime, a.channel as channel, a.version as version, a.packageName as packageName, a.appName as appName, a.isCp as isCp FROM game_center_finish_install_log a WHERE a.pageId != 1600 AND pageId > 0 and type=1 AND a.serverTime BETWEEN date_format(date_sub(now(),interval 1 day),'%Y%m%d00') AND date_format(date_sub(now(),interval 1 day),'%Y%m%d23') AND a.clientTime BETWEEN date_format(date_sub(now(),interval 3 day),'%Y%m%d00') AND date_format(date_sub(now(),interval 1 day),'%Y%m%d23') GROUP BY LEFT(a.clientTime,8), a.version, a.channel, a.appName, a.packageName, a.isCp"); PREPARE sql_into_table FROM @sql_into_table; EXECUTE sql_into_table;
相关文章推荐
- MYSQL INSERT INTO SELECT 不插入重复数据
- mysql 使用select插入多条数据,insert into (1,2,3,4,)select(1,2,3,4)
- MYSQL INSERT INTO SELECT 不插入重复数据
- [乐意黎转载]MYSQL INSERT INTO SELECT 不插入重复数据
- MYSQL INSERT INTO SELECT 不插入重复数据
- MySQL命令insert into:向表中插入数据(记录)
- insert into select 插入不进去数据
- PHP+MySQL之Insert Into数据插入用法分析
- 把一个表的数据插入到另一个表:INSERT INTO SELECT / SELECT INTO
- oracle 通过查询灵活插入数据 insert into ...select..
- MySql中利用insert into select 准备数据uuid主键冲突
- oracle 通过查询灵活插入数据 insert into ...select..
- 如何优化用SQL语句INSERT INTO … SELECT插入数据时锁全表的问题
- 【转载】在mysql中获取insert插入数据的id的方法SELECT LAST_INSERT_ID();
- INSERT INTO .. SELECT ... FROM DUAL WHERE.插入数据前判断表中是否已经存在
- 插入数据 insert into / select
- mysql 使用 insert ignore into和unique实现不插入重复数据功能
- MySQL 如何提高innodb insert into select的插入速度
- 把一个表的数据插入到另一个表:INSERT INTO SELECT / SELECT INTO
- MySql中利用insert into select 准备数据uuid主键冲突