SQL 查询: 文档 UPDATE ipccpcdr SET area_id = ( SELECT q.area_id FROM asterisk.queues_info q WHERE ipccpcdr.Queue = q.queue_index LIMIT 1) WHERE area_id = '' AND id IN ( SELECT id FROM ipccpcdr WHERE area_id = '' LIMIT 1000) MySQL 返回: 文档 #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
时间: 2024-02-12 07:05:38 浏览: 72
chan_ss7-1.0.0.tar.gz_asterisk_chan_ss7_ss7
这个错误是由于MySQL版本过低,不支持在IN子查询中使用LIMIT语句。如果你想要解决这个问题,可以考虑升级MySQL版本或者改写查询语句。改写查询语句的方法有很多种,我这里提供一种思路,可以使用临时表来实现分批更新,如下所示:
```
CREATE TEMPORARY TABLE temp_table(
id INT NOT NULL
);
INSERT INTO temp_table(
SELECT id FROM ipccpcdr WHERE area_id = '' LIMIT 1000
);
UPDATE ipccpcdr SET area_id = (
SELECT q.area_id FROM asterisk.queues_info q WHERE ipccpcdr.Queue = q.queue_index LIMIT 1
) WHERE area_id = '' AND id IN (
SELECT id FROM temp_table
);
DROP TEMPORARY TABLE temp_table;
```
这个语句会先创建一个临时表temp_table,然后将要更新的记录的ID插入到这个表中。接下来,使用UPDATE语句来更新记录,其中子查询从临时表中选择ID,然后将其传递给UPDATE语句。最后,删除临时表。这个语句可以实现分批更新,每次更新1000条记录。
阅读全文