我写了一个非常简单的查询
UPDATE product_variants SET remaining= 15 WHERE id=(select id where remaining<15)
正在我的本地机器上成功完成工作。
但是,同一查询在服务器
上发出以下错误MySQL服务器版本,用于在'where附近使用正确的语法 在第1行剩下&lt; 15)'
我知道同样的查询也可以写成
UPDATE `product_variants` SET `remaining`= 15 WHERE remaining<15;
但我想知道第一个查询中的语法错误。
mysql --version
mysql Ver 14.14使用readline 6.3为debian-linux-gnu(x86_64)分发5.5.52
Ubuntu版
Linux ip-172-31-27-247 3.13.0-74-generic#118-Ubuntu SMP Thu Dec 17 22:52:10 UTC 2015 x86_64 x86_64 x86_64 GNU / Linux
答案 0 :(得分:1)
在子查询的select语句中无法使用相同的更新表,您可以在此链接中找到原因:Reason for not use same table in sub-query.
尝试以下查询:
SET @r_ids = (select GROUP_CONCAT(id) FROM product_variants where remaining <15);
/* set the result id's into the one variable. */
SELECT @r_ids;
/* If you want to check the variable value, use above statement. */
UPDATE product_variants SET remaining= 15
WHERE id IN (@r_ids);
/* update that same id's which is find into the @r_ids. */
您可以在此链接中找到有关变量的更多信息。More about Variables.
首先将id存储到some变量中,然后使用in
查询更新这些id。
答案 1 :(得分:1)
UPDATE product_variants SET remaining= 15 WHERE id=(select id where remaining<15)
两个人认为:
(select GROUP_CONCAT(id) where remaining<15)
缺少您要从SELECT id FROM ... where remaining<15
where id in
而不是where id =
,因为您的查询可能会返回多行。这应该有效:
UPDATE product_variants
SET remaining= 15
WHERE id IN
(SELECT id
FROM
(SELECT id
FROM product_variants
WHERE remaining<15) a)