MariaDB,子查询中的UPDATE with SELECT,LIMIT

ny6fqffe  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(33)

我试图使用SELECT查询更新表中的字段,当我执行时,我看到错误:

08:10:16    UPDATE TABLE `Tesla-20240105` SET `state`=1 WHERE `id` IN (SELECT `id` FROM `Tesla-20240105` WHERE `state` IS NULL LIMIT 10)    Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'TABLE `Tesla-20240105` SET `state`=1 WHERE `id` IN (SELECT `id` FROM `Tesla-2...' at line 1  0.00013 sec
08:10:48    UPDATE `Tesla-20240105` SET `state`=1 WHERE `id` IN (SELECT `id` FROM `Tesla-20240105` WHERE `state` IS NULL LIMIT 10)  Error Code: 1235. This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'    0.040 sec

字符串
这个表可能有300,000条记录,上面是试图选择10条状态为NULL的记录并修改它们,对于如何实现这一点有什么建议吗?

klsxnrf1

klsxnrf11#

因为你更新的是同一个表,你用来检查“id IN”条件,所以在IN子查询中没有必要,你可以在主UPDATE查询中只执行“WHERE state IS NULL”:

UPDATE `Tesla-20240105` 
  SET `state` = 1 
  WHERE `state` IS NULL
  LIMIT 10

字符串
这应该允许避免子查询的完全执行,或者换句话说-使用LIMIT来避免对所有记录进行WHERE条件检查。
以下是演示(只是记录数较少):https://dbfiddle.uk/4qvhSXZU

vc6uscn9

vc6uscn92#

limit从子查询中移到主查询中怎么样?

UPDATE `Tesla-20240105` SET 
  `state`=1 
WHERE `id` IN (SELECT `id` 
               FROM `Tesla-20240105` 
               WHERE `state` IS NULL
              ) 
LIMIT 10

字符串

相关问题