2

我有一个非常嵌套的 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”时,它都会引发错误。

非常感谢任何帮助。

4

1 回答 1

2

您可以使用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)
于 2020-12-12T23:47:15.950 回答