简单的MySQL查询未在服务器

时间:2017-08-24 09:09:30

标签: mysql ubuntu

我写了一个非常简单的查询

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

2 个答案:

答案 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)

两个人认为:

  1. (select GROUP_CONCAT(id) where remaining<15)缺少您要从SELECT id FROM ... where remaining<15
  2. 中选择的表格
  3. 您必须使用where id in而不是where id =,因为您的查询可能会返回多行。
  4. 这应该有效:

    UPDATE product_variants
    SET remaining= 15
    WHERE id IN
            (SELECT id
             FROM
                 (SELECT id
                  FROM product_variants
                  WHERE remaining<15) a)