Insert into (with select statement) and additional ON DUPLICATE KEY UPDATE based on the select 语句

Insert into (with select statement) and additional ON DUPLICATE KEY UPDATE based on the select statement

我有一个非常嵌套的 mysql 查询,我想根据 select 语句插入或更新值。

下面的代码经过了简化,但演示了我遇到的问题。

INSERT INTO product_feeds(`product_id`,`vat_dk`) select p.product_id,
round(((select p2.`calc_value` from product_prices p1 left join calcs p2 on   
p1.product_tax_id=p2.calc_id where p1.product_id=p.product_id and p1.product_currency = '40')/100+1),2) 
as vat_dk from products p where vendor_id = 1 ON DUPLICATE KEY UPDATE `vat_dk` = '1.25'

INSERT 查询的值设置正确。但是,如何为 ON DUPLICATE KEY UPDATE 部分也设置正确的值。每当我用上面的查询替换“1.25”时,它都会抛出错误。

非常感谢任何帮助。

您可以使用 VALUES() 来引用否则会插入的值。

所以:

insert into product_feeds(`product_id`,`vat_dk`) 
select 
    p.product_id,
    round(
        (
            (
                select p2.`calc_value` 
                from product_prices p1 
                left join calcs p2 on p1.product_tax_id = p2.calc_id 
                where p1.product_id = p.product_id and p1.product_currency = '40'
            ) / 100 + 1
        ), 2
    ) as vat_dk 
from products p 
where vendor_id = 1 
on duplicate key update vat_dk = values(vat_dk)