mysql - 使用 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)。
这导致我收到以下错误:
准备好的语句包含太多占位符
如果不是因为它基于不在列表中的值而删除,我会将这些值分成更小的大小。
有什么想法可以解决这个问题吗?
解决方案
创建一个包含所有要限制的 ID 的临时表。为表中的列添加索引。然后使用
UPDATE table
SET xyz = 'abc', updated_at = '2021-09-27 23:00:00'
WHERE external_id NOT IN (SELECT id FROM temporary_table);
推荐阅读
- node.js - 取消合并分支
- flutter - 在颤动中从小部件屏幕截图中设置壁纸
- javascript - 错误:没有可用的 chokidar 版本。试过 chokidar@2 和 chokidar@3。将 npm 升级到 7.*.* 后
- opentk - 控制器需要在程序运行时连接才能被视为已连接?
- javascript - Expo React Native 错误:元素类型无效:应为字符串(对于内置组件)
- python - 熊猫数据框中的无序和重复索引
- continuous-integration - 我如何同时处理并行发布>
- javascript - 有条件地与无条件地使用 React children 道具元素
- go - Golang SQLBoiler 将 bit(1) 转换为字符串而不是 bool 或 int
- design-patterns - 调度器设计模式代码改进