SQL 在不存在的地方插入以防止主键问题

SQL Insert with where not exists to prevent primary key issues

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

现在我正在尝试以下操作:

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 上是主要的 - 我试过连接,但不存在,等等,但不能'即使通过挖掘 Whosebug 线程,我也无法解决这个问题。

请帮忙?

我的第一个问题是:你能重新设计 table,或者添加一个新的 PK 而不是 date 吗?

如果答案是否定的,那么您可以查看:insert on duplicate key updateinsert ignore 如果您真的想忽略主键违规并取消尝试的插入。

试试这个:

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