您好我有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
答案 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;