SQL Insert与不存在的位置以防止主键问题

时间:2015-07-08 17:28:58

标签: mysql sql casting insert

我有两个表,一个是每小时数据,另一个是每日数据总和,我有重复的主键问题所以我正在尝试做一些不存在的地方但是我还需要允许当前日期(今天)继续全天添加。

现在我正在尝试以下方法:

insert into dailybtuTEST 
SELECT cast(DT as date), SUM(case when `BoilerBTUhr` > 0 then `BoilerBTUhr` else 0 end)/1000000 as BoilerBTU, SUM(case when `InfloorBTUhr` > 0 then `InfloorBTUhr` else 0 end)/1000000 as InfloorBTU, SUM(case when `BufferBTUhr` > 0 then `BufferBTUhr` else 0 end)/1000000 as BufferBTU FROM table_solarhrTEST
where not exists (select 1 from dailybtuTEST where DT = table_solarhrTEST.DT);

我得到重复的条目主键错误(DT是dailybtuTEST上的主要错误,并且table_solarhrTEST上的任意记录号是主要的 - 我尝试了连接,不存在等等,并且不能用于我的生活即使使用挖掘stackoverflow线程,也要想出来。

请帮忙吗?

2 个答案:

答案 0 :(得分:1)

我会遇到的第一个问题是:您可以重新设计表格,还是添加date以外的新PK?

如果答案为否,那么您可以查看:insert on duplicate key updateinsert ignore,如果您确实要忽略主键违规并取消尝试的插入内容。

答案 1 :(得分:1)

试试这个:

insert into dailybtuTEST 
SELECT cast(DT as date), SUM(case when `BoilerBTUhr` > 0 then `BoilerBTUhr` else 0 end)/1000000 as BoilerBTU, SUM(case when `InfloorBTUhr` > 0 then `InfloorBTUhr` else 0 end)/1000000 as InfloorBTU, SUM(case when `BufferBTUhr` > 0 then `BufferBTUhr` else 0 end)/1000000 as BufferBTU
FROM table_solarhrTEST s
LEFT JOIN dailybtuTEST d ON d.DT = s.DT
WHERE d.DT IS NULL