【问题标题】:Conditional Typeorm QueryBuilder that updates in list of tuples在元组列表中更新的条件 Typeorm QueryBuilder
【发布时间】:2021-10-24 10:23:39
【问题描述】:

我正在尝试基于 2D 数组执行条件 UPDATE 查询,该查询应如下所示:

UPDATE table_name SET head = 0 WHERE head = 1 AND (val1, val2) IN (('?', '?'), ('?', '?'));

这是我目前得到的,但它似乎生成了错误的 SQL 查询:

        .createQueryBuilder()
        .update(Entity)
        .set({ head: false })
        .where('is_head = 1 AND (val1, val2) IN (:...ids)', { ids: [[5,6], [7, 9]] })

在文档中真的找不到有用的东西,这真的可以通过 mysql2 驱动程序实现吗?

【问题讨论】:

    标签: javascript mysql node.js typescript typeorm


    【解决方案1】:

    作为最后的手段,您可以使用循环来生成 WHERE 表达式,例如...

    interface TupleQuery {
      tupleExpressions: string[];
      parameters: { [parameter: string]: unknown[] };
    }
    
    const ids: [number, number][] = [[5, 6], [7, 9]];
    const initialValue: TupleQuery = { tupleExpressions: [], parameters: {} };
    const { tupleExpressions, parameters } = ids.reduce((result, currentTuple, index) => ({
      tupleExpressions: result.tupleExpressions.concat([`(:...ids-${index})`]),
      parameters: { ...result.parameters, [`ids-${index}`]: currentTuple },
    }), initialValue);
    
    // ...afterwards
    .where(`is_head = 1 AND (val1, val2) IN (${tupleExpressions.join(', ')})`, parameters)
    

    【讨论】:

      猜你喜欢
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 2020-10-24
      • 2021-09-25
      相关资源
      最近更新 更多