【问题标题】:Check if all entries exist in table检查表中是否存在所有条目
【发布时间】:2020-03-25 04:35:45
【问题描述】:

美好的一天,

我在 nodeJs 中使用 Sequelize mysql。

我的问题是,给定一个 ID 数组,例如 [4,5,6,7,8]

还有一个表 T,其中每一行都有一个 ID。说, 表T:

身份证

4

5

7

8

如何查询数组中的所有ID是否都存在于表中?

我是否做一个 for 循环并在每个循环上调用 find ?这是异步完成的还是同步完成的?如果我想这样做,我该如何将它包装在一个承诺中?

如果表中存在给定数组的所有 ID,我不确定搜索的正确方法是什么。

谢谢

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:
    SELECT COUNT(DISTINCT id) = 5       -- the values amount in the array
    FROM sourcetable
    WHERE FIND_IN_SET(id, '4,5,6,7,8')  -- the array as CSV literal
    

    此查询将返回 1 条记录和一个字段。值1 表示所有数组元素都存在,0 - 至少有一个元素不存在。

    数组不得包含重复项。

    【讨论】:

      【解决方案2】:

      foreach 循环将不起作用,因此请在下面使用 for 循环示例

        const ids =  [4,5,6,7,8];
        for (const id of ids) {
          db.T
            .findOne({
              where: { id: id }
            }).then()
        }
      

      【讨论】:

      • 我需要将它包装在一个承诺中还是与承诺有关的东西中?
      • promise 和 async 函数都可以工作,只是 foreach 循环不是异步的
      • 几天前我也问过同样的问题,你也检查一下stackoverflow.com/questions/60706243/…
      【解决方案3】:

      我认为您可以通过 findAll 或计数轻松达到此目的。您提供 ids 并要求从数据库中返回它们,如果项目数匹配您应该没问题

      model.findAll({
        where: {
          Id: {
            [Op.or]: [4,5,6,7,8]
          }
        }
      });
      

      如果您不需要返回对象,您可以对 count 执行相同操作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-09
        • 2018-04-22
        • 2013-04-03
        • 2023-04-11
        • 2012-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多