TypeORM QueryBuilder如何基于元组列表实现条件UPDATE操作
多列IN条件UPDATE查询实现方案
该需求在mysql2驱动下完全可以实现,你当前的写法报错是因为TypeORM查询构造器的:前缀数组展开语法不支持二维数组的自动格式化,会直接把二维数组扁平为一维值列表,导致生成的SQL结构和多列IN的语法要求不匹配。
推荐实现方案如下,兼顾安全性和执行效率:
const matchPairs = [[5, 6], [7, 9]]; // 生成对应组数的占位符:(?, ?), (?, ?) const placeholders = matchPairs.map(() => '(?, ?)').join(','); // 扁平化二维数组为参数列表 const params = matchPairs.flat(); await createQueryBuilder() .update(Entity) .set({ head: false }) .where(`is_head = 1 AND (val1, val2) IN (${placeholders})`, params) .execute();
补充说明
- MySQL本身原生支持行值表达式(行构造器)的IN查询,你预期的SQL语法完全合法
- 上述方案没有SQL注入风险,所有匹配值都是通过参数绑定传入,仅占位符是静态拼接生成
- 不需要额外依赖其他工具,兼容所有支持mysql2驱动的TypeORM版本
内容的提问来源于stack exchange,提问作者alex1997
相关产品推荐
相关产品推荐

