嗨,我有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尚未支持'限制'in/all/anl/any/yy/some some subquery''
使用mysql版本:5.7.15
使用 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'
在5.7的mySQL文档中,mysql不支持某些子查询操作员的子查询限制"
http://dev.mysql.com/doc/refman/5.7/en/subquery-restrictions.html
我还在此处找到了有关限制关键字的子查询错误:MySQL-此版本的MySQL尚未支持'限制&在/all/any/lose subquery
希望这会有所帮助:)
这是正确的语法看起来更像:
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);
一个子查询不应像字符串一样被引号包围。
但是,我认为这不会有两个原因:(1)表是相同的,(2)极限。
。所以,这可能会做您想要的:
UPDATE mydb
SET device = '$device'
WHERE device IS NULL AND Activated = 1
ORDER BY id ASC
LIMIT 10;
如果您真的想根据name
而不是id
。
我建议您努力工作。摆脱SELECT
:
UPDATE mydb SET device='$device'
WHERE device IS NULL AND Activated=1
ORDER BY id ASC LIMIT 10;