javascript - 从 Sequelize 中的另一个表中计数

标签 javascript node.js sequelize.js

我必须将此 SQL 重写为 Sequelize:

SELECT table1.id, table1.name, 
    (SELECT COUNT(*) FROM table2 WHERE table2.t1_id = table1.id) AS t1_count 
FROM table1 WHERE .... LIMIT ..... OFFSET .....;
谢谢 :)

最佳答案

要在您的示例中生成确切的 SQL,请使用 sequelize.literal() 生成子查询。

const result = await Table1.findByPk(id, {
  attributes: [
    'id', 
    'name',
    [
      sequelize.literal(`(
        SELECT COUNT(table2.id)
        FROM table2
        WHERE table2.id = table1.t1_id
      )`),
      't1_count',
    ],
  ],
  where: {
    // ...
  },
  limit: {
    // ...
  },
  offset: {
    // ...
  },
});
您也可以通过使用 LEFT JOIN 然后使用 sequelize.fn() 对连接的结果调用 COUNT() 来完成此操作。
const result = await Table1.findByPk(id, {
  attributes: [
    'id', 
    'name',
    [
      sequelize.fn('COUNT', sequelize.col('table2.id')),
      't1_count',
    ],
  ],
  include: {
    model: Table2,
    attributes: [],
    where: {
      id: {
        [Op.col]: sequelize.col('table1.t1_id'),
      },
    },
    required: false,
  },
  where: {
    // ...
  },
  limit: {
    // ...
  },
  offset: {
    // ...
  },
});
SELECT id, name, COUNT(table2.id)
FROM table1
LEFT JOIN table2 ON table2.id = table1.t1_id 
WHERE .... LIMIT ..... OFFSET .....;

关于javascript - 从 Sequelize 中的另一个表中计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67203665/

相关文章:

javascript - 使用 JavaScript 将新元素添加到 DOM 中

javascript - 多个查询以不可预测的排序结果结束

javascript - JavaScript 是否有类似于 php list 命令的语言结构?

mysql - 为什么我的 sequelize 查询在急切加载与另一个关联的模型时会因 ER_BAD_FIELD_ERROR 而中断?

mysql - 序列化 findAll 和 Join 表

mysql - Sequelize LIKE 不适用于 WHERE 子句

javascript - 减少嵌套的 Promise

javascript - IE7/8 中的 jQuery 动态元素错误

php - 这个 jquery 帖子没有显示 html?

javascript - Nodejs 代码未按预期执行