MySQL服务器版本,用于在''附近使用正确的语法

时间:2015-10-01 07:49:30

标签: php mysql sql mysql-error-1064

我有Mysql查询问题。我的问题是

UPDATE oc_product p 
INNER JOIN oc_currency as c 
ON p.price2_currency_code=c.`code` 
SET p.price=CASE WHEN p.price2_currency_code='EUR' THEN p.price2*c.`value` 
WHEN p.price2_currency_code='USD' THEN p.price2*c.`value` 
ELSE p.price;

我总是

  

[Err] 1064 - 您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以获得正确的语法   使用附近''在第4行

5 个答案:

答案 0 :(得分:3)

可能你错过了END

UPDATE oc_product p 
INNER JOIN oc_currency as c 
ON p.price2_currency_code=c.`code` 
SET p.price=CASE WHEN p.price2_currency_code='EUR' THEN p.price2*c.`value` 
WHEN p.price2_currency_code='USD' THEN p.price2*c.`value` 
ELSE p.price
END

答案 1 :(得分:0)

尝试使用以下查询:

update p
set p.price = (case when p.price2_currency_code='EUR' 
then p.price2*c.`value` 
when p.price2_currency_code='USD' then p.price2*c.`value` 
else p.price end)
from oc_product p
join oc_currency c
on p.price2_currency_code=c.`code`;

答案 2 :(得分:0)

/D:

答案 3 :(得分:0)

您只有两个条件,因此您还可以使用比IF

更简单的CASE
UPDATE oc_product p 
    INNER JOIN oc_currency as c 
    ON p.price2_currency_code=c.`code` 
SET p.price=
    IF(p.price2_currency_code='EUR' OR p.price2_currency_code='USD', p.price2*c.`value`, p.price);

答案 4 :(得分:0)

在查询结束时添加一个END CASE,你就已经完成了设置。

UPDATE oc_product p 
INNER JOIN oc_currency as c 
ON p.price2_currency_code=c.`code` 
SET p.price=CASE WHEN p.price2_currency_code='EUR' THEN p.price2*c.`value` 
WHEN p.price2_currency_code='USD' THEN p.price2*c.`value` 
ELSE p.price
END CASE;