1. 程式人生 > >insert into table (a,b,c) select

insert into table (a,b,c) select

parameter ase last form res 目標 字段 ati time

本文為博主原創,轉載請註明出處:

在項目中,需要統計數據,從基礎表中的數據進行統計,並插入到匯總 表中,

(1)語句形式為:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

或者:Insert into Table2 select * from Table1

註意:(1)要求目標表Table2必須存在,並且字段field,field2...也必須存在

(2)註意Table2的主鍵約束,如果Table2有主鍵而且不為空,則 field1, field2...中必須包括主鍵

(3)註意語法,不要加values,和插入一條數據的sql混了,不要寫成:

Insert into Table2(field1,field2,...) values (select value1,value2,... from Table1)

應用實例展示:

 <insert id="addMonthStatistics" parameterType="com.statistics.model.MonthStatistics">
        INSERT INTO tbl_statistics_month(month,livePlayCount,vodPlayCount,liveFlow,vodFlow,storeSpace,storeResidueSpace)
        SELECT DATE_FORMAT(#{month}, 
%Y%m) AS month, SUM(t.livePlayCount) AS livePlayCount, SUM(t.vodPlayCount) AS vodPlayCount, SUM(t.liveFlow) AS liveFlow, SUM(t.vodFlow) AS vodFlow , SUM(t.storeSpace) AS storeSpace, SUM(t.storeResidueSpace) AS storeResidueSpace FROM ( SELECT CASE u.playerType WHEN
1 THEN u.num ELSE 0 END AS livePlayCount, CASE u.playerType WHEN 2 THEN u.num ELSE 0 END AS vodPlayCount, CASE u.playerType WHEN 1 THEN u.flowNum ELSE 0 END AS liveFlow, CASE u.playerType WHEN 2 THEN u.flowNum ELSE 0 END AS vodFlow, 0 AS storeSpace , 0 AS storeResidueSpace FROM ( SELECT playerType, COUNT(*) AS num, ifnull(SUM(bytesSend),0) AS flowNum FROM tbl_player_statistics WHERE playerTime BETWEEN CONCAT(DATE_FORMAT(#{month},%Y-%m),-01 00:00:00) AND CONCAT(DATE_FORMAT(last_day(#{month}),%Y-%m-%d), 23:59:59) GROUP BY playerType ) u UNION ALL SELECT 0 AS livePlayCount, 0 AS vodPlayCount, 0 AS liveFlow, 0 AS vodFlow, ifnull(SUM(fileSize),0) AS storeSpace , 8192000 - ifnull(SUM(fileSize),0) AS storeResidueSpace FROM tbl_person_space ) t </insert>

insert into table (a,b,c) select