首页 > 解决方案 > 使用 WHERE NOT IN 更新查询时“准备好的语句包含太多占位符”

问题描述

我有一个看起来像这样的更新查询:

UPDATE table SET xyz = 'abc', updated_at = '2021-09-27 23:00:00' WHERE external_id NOT IN (1, 2, 3...);

我似乎遇到的问题是 WHERE 子句中的值太多(大约 50000)。

这导致我收到以下错误:

准备好的语句包含太多占位符

如果不是因为它基于不在列表中的值而删除,我会将这些值分成更小的大小。

有什么想法可以解决这个问题吗?

标签: mysql

解决方案


创建一个包含所有要限制的 ID 的临时表。为表中的列添加索引。然后使用

UPDATE table 
SET xyz = 'abc', updated_at = '2021-09-27 23:00:00' 
WHERE external_id NOT IN (SELECT id FROM temporary_table);

推荐阅读