Sequelize - 在 where 子句中查询其他表

Posted

技术标签:

【中文标题】Sequelize - 在 where 子句中查询其他表【英文标题】:Sequelize - query other table inside where clause 【发布时间】:2021-06-16 14:54:22 【问题描述】:

我正在尝试做某事,但不知道这是否可以通过 sequelize 实现。基本上我在graphQl上运行了这段代码sn-p,基本上它的作用是在kits表上找到kits,然后验证“users”表上是否存在相同的id。如果不是,则返回它们,如果是,则不返回。但是现在我们需要对其进行扩展以进行分页,并且当前的 sn-p 不是那么可扩展的。这就是为什么我想只在 where 子句中包含 for 循环或以某种方式检查那里,但实际上不知道 mysql 上允许执行此操作的任何命令。

你有什么建议吗?

async findKitsWithResultNoReg2(_, search) 
      try 
        let promises = []
        const a1 = await db.kits.findAll(
          where: 
            [Op.and]: [
               result:  [Op.or]: [1, 2, 3]  , 
               cp: 0 ,
              [Op.or]: [
                 kitID:  [Op.like]: '%' + search + '%'  ]
            ]
          
        )
        for (let i = 0; i < a1.length; i++) 
          const a2 = await db.users.findByPk(a1[i].dataValues.kitID)
          if (a2 === null) 
            const a3 = 
              kitID: a1[i].dataValues.kitID,
              result: a1[i].dataValues.result,
              date: a1[i].dataValues.resultDate
            
            promises.push(a3)
          
        
        
        return Promise.all(promises)
       catch (error) 
        console.log(error)
      
    ,

【问题讨论】:

【参考方案1】:
 async findKitsWithResultNoReg() 
      try 
        const a0 = await sequelize.query(`SELECT kitID, result, resultDate from kits where result in (1,2,3) and cp = 0 and archived = 0 and not Exists(select kitID from users where kits.kitID = users.kitID) order by resultDate desc`,   type: QueryTypes.SELECT )
        const a1 = JSON.stringify(a0)
        return a1
       catch (error) 
        console.log(error)
      
    ,

【讨论】:

以上是关于Sequelize - 在 where 子句中查询其他表的主要内容,如果未能解决你的问题,请参考以下文章

Sequelize - 使用 MariaDB 的 where 子句中的地理位置

Sequelize:WHERE LIKE 子句中的 Concat 字段

在 sequelize where 子句中使用 ILIKE(JSON 列)

在 sequelize 中查询 where 关联?

使用 sequelize 包含列的 where 子句

使用 Node 和 sequelize 关联对象的 Where 子句