У меня есть таблица с именем
FactSales (ID, dateid, customerid, salesid, salescount)
Здесь ID - автоинкремент первичного ключа.
Я также добавил уникальное ограничение, состоящее из столбцов dateid, customerid и salesid
Мои требования : вставлять / обновлять данные ежедневно, используя мой SP.
Моя проблема : Я пытался вставить ... при обновлении дубликата ключа, но он не работает.
Мой полный код здесь
-- this is creation script for factsales table
CREATE TABLE FactSales
(
ID BIGINT(20) NOT NULL auto_increment,
DateID INT(11) DEFAULT NULL,
CustomerID INT(11) DEFAULT NULL,
salesID INT(11) DEFAULT NULL,
salescount INT(11) DEFAULT NULL,
PRIMARY KEY (ID)
);
-- adding the unique constraint
ALTER TABLE FactSales ADD UNIQUE KEY uk1 (dateid,customerid,salesid);
-- creating the dummy table for work
DROP TABLE if exists tmpfactsales CREATE TABLE tmpfactsales
(
ID BIGINT(20) NOT NULL auto_increment,
DateID INT(11) DEFAULT NULL,
CustomerID INT(11) DEFAULT NULL,
salesID INT(11) DEFAULT NULL,
salescount INT(11) DEFAULT NULL,
PRIMARY KEY (ID)
);
-- now I need to get maximum of minimum last entry date of all customers
SELECT MIN(maxdate) INTO @MinMaxDateID
FROM (SELECT a.customerid,
MAX(a.dateid) AS maxdate
FROM factsales a
GROUP BY a..customerID) a;
-- inserting data from min max date into dummy table
INSERT INTO tmpfactsales
(
dateid,
customerid,
salesid,
Salescount
)
SELECT dateid,
customerid,
salesid,
SUM(salescount) AS salescount
FROM fact_customer_sales
WHERE status = 'active'
-- condition for daily data
AND dateid >= @minmaxdateid
AND dateid <= curdate()
GROUP BY dateid,
customerid,
salesid;
-- BEGIN Insert update on duplicate key
INSERT INTO FactSales
(
dateid,
customerid,
salesid,
salescount
)
SELECT dateid,
customerid,
salesid,
salescount
FROM tmpfactsales ON duplicate KEY UPDATE factsales.salescount = tmpfactsales.salescount;
Ожидаемый результат : Обновите, если он уже существует, или вставьте новые данные в таблицу продаж фактов. В моем случае вместо этого добавляются новые записи.
подробнее о моих данных тут: https://i.stack.imgur.com/8myHO.png