在一个语句中从SELECT数组更新查询

时间:2016-12-30 00:50:17

标签: php mysql sql

您好我有2条SQL语句

声明1:

SELECT id, name, version FROM mydb WHERE device IS NULL AND Activated=1 ORDER BY id ASC LIMIT 10

声明2:

UPDATE mydb SET device='$device' WHERE name IN ('$itemsArray')

我从第一个语句中获取了$itemsArray数组,但现在我需要将这些语句组合起来,我不知道如何去做并保持高效。

当我自己尝试时,我会受到0行影响:

UPDATE mydb SET device='$device' WHERE Name IN (SELECT name FROM mydb WHERE device IS NULL AND Activated=1 ORDER BY id ASC LIMIT 10)

编辑:从子查询中删除引号。现在我收到了这个错误:"这个版本的MySQL还没有支持' LIMIT& IN / ALL / ANY / SOME子查询'"

使用MySQL版本:5.7.15

4 个答案:

答案 0 :(得分:2)

在5.7的MySQL文档中,它指出“MySQL在某些子查询运算符的子查询中不支持LIMIT”

http://dev.mysql.com/doc/refman/5.7/en/subquery-restrictions.html

我还在LIMQ关键字的子查询错误中找到了这个相关的帖子: MySQL - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery

希望这会有所帮助:)

答案 1 :(得分:2)

使用JOIN将子查询与表格相关联。

UPDATE mydb AS t1
JOIN (SELECT name 
      FROM mydb 
      WHERE device IS NULL AND Activated=1 
      ORDER BY id ASC 
      LIMIT 10) AS t2 ON t1.Name = t2.Name
SET device = '$device'

答案 2 :(得分:0)

这是正确的语法看起来更像这样:

UPDATE mydb
    SET device = '$device'
    WHERE device IS NULL AND Activated = 1
    ORDER BY id ASC
    LIMIT 10;

子查询不应该用引号括起来,比如字符串。

但是,我认为这不会有两个原因:(1)表格相同,(2)限制。

所以,这可能会做你想要的:

name

如果您确实要根据id而不是Duration.parse( "PT1H30M" ).toMillis() 进行更新,则可能需要更复杂的查询。

答案 3 :(得分:0)

我建议你工作太辛苦了。摆脱SELECT

UPDATE mydb SET device='$device'
    WHERE device IS NULL AND Activated=1
    ORDER BY id ASC LIMIT 10;