You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:18:02