我写了一个非常简单的查询
UPDATE product_variants SET remaining= 15 WHERE id=(select id where remaining<15)
它在我的本地机器上成功地完成了它的工作。
但是,相同的查询在服务器上给出以下错误
MySQL 服务器版本,用于在"其中"附近使用的正确语法 剩余<15(' 在第 1 行
我知道同样的查询也可以写成
UPDATE `product_variants` SET `remaining`= 15 WHERE remaining<15;
但我想知道第一个查询中的语法错误。
Mysql --version
mysql Ver 14.14 Distrib 5.5.52,用于使用 readline 6.3 的 debian-linux-gnu (x86_64(
乌班图版本
Linuxip-172-31-27-247 3.13.0-74-generic #118-Ubuntu SMP 星期四 12 月 17 日 22:52:10 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
在子查询的 select 语句中不可能使用相同的更新表,您可以在此链接中找到原因:在子查询中不使用相同的表的原因。
请尝试以下查询:
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. */
您可以在此链接中找到有关变量的更多信息。有关变量的更多信息。
首先将 id 存储到 some 变量中,然后使用in
查询更新这些 id。
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)