仅当值不同时才插入MYSQL

时间:2017-07-27 16:36:42

标签: mysql sql

我正在尝试将具有相同ID的新行插入到简单表中,但只想在值不同时插入。

此表用于跟踪商品的价格历史记录。该表格包含以下列:

id,timestamp,productID,price

如果产品不存在或产品确实存在但价格已发生变化,我只想插入新记录。

不幸的是,由于我的知识有限,我有脑力障碍,并且会感谢有关转向的帮助,所以我没有对代码进行任何试验来做到这一点。

谢谢!

2 个答案:

答案 0 :(得分:2)

你可以尝试这样的事情:

SET @PRODUCT = 1; # product id
SET @PRICE = 1; # new product price

insert into `t`(`product`, `timestamp`, `price`)
select v.product, now(), v.price
from
(select @PRODUCT as `product`, @PRICE as `price`) as v
left outer join
(select `product`, `price` from `t` where `product`=@PRODUCT order by `id` desc limit 1) as p
on (v.product=p.product)
where
(p.price is null) or
(p.price <> v.price);

所以,这句话要么插入新行(对于新产品或新价格)要么不做任何事情

答案 1 :(得分:-1)

你需要composite primary key

ALTER TABLE products ADD PRIMARY KEY(product,price);

在此查询之后,如果您在表中的产品和价格相同时插入,则返回带有重复条目的错误

或者即使一个字段值发生变化也会插入查询