首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的MySQL查询不在服务器上运行

简单的MySQL查询不在服务器上运行
EN

Stack Overflow用户
提问于 2017-08-24 09:09:29
回答 2查看 91关注 0票数 0

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

代码语言:javascript
复制
UPDATE product_variants SET remaining= 15 WHERE id=(select id where remaining<15)

在我的本地机器上成功地完成了工作。

但是,相同的查询在服务器上出现了以下错误

MySQL服务器版本,以便在第1行的“where remaining<15”附近使用正确的语法

我知道同样的查询也可以写成

代码语言:javascript
复制
UPDATE `product_variants` SET `remaining`= 15 WHERE remaining<15;

但是我想知道第一个查询中的语法错误。

mysql --版本

mysql 14.14远端5.5.52,使用readline 6.3为debian gnu (x86_64)

Ubuntu版本

Linux 172-31-27-247 3.13.0-74-通用#118-Ubuntu清华12月17日22:52:10 UTC 2015 x86_64 GNU/Linux

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-24 09:11:48

无法在子查询中的select语句中使用相同的update表,您可以在以下链接中找到原因:在子查询中不使用相同表的原因。

请尝试以下查询:

代码语言:javascript
复制
 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存储到某个变量中,然后使用in查询更新这些id。

票数 1
EN

Stack Overflow用户

发布于 2017-08-24 09:14:25

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. 您必须使用where id in而不是where id =,因为查询可能返回多个行。

这应该是可行的:

代码语言:javascript
复制
UPDATE product_variants
SET remaining= 15
WHERE id IN
        (SELECT id
         FROM
             (SELECT id
              FROM product_variants
              WHERE remaining<15) a)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45857486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档