NodeJS 如何将SQL查询转换为Sequelize?

cpjpxq1n  于 2022-11-22  发布在  Node.js
关注(0)|答案(4)|浏览(200)

我有一个SQL查询(使用mysql作为数据库),现在需要在node.js中将其重写为sequelize.js查询。
SQL查询

SELECT p.UserID, SUM(p.score), u.username
FROM Picks p
LEFT JOIN Users u
ON p.UserId = u.id
GROUP BY p.UserId;

我不太确定如何构造这个查询才能得到与sequelize相同的结果。

irlmq6kh

irlmq6kh1#

这应该可以满足您的需求:

db.Pick.findAll({
  attributes: [
    'UserID',
    [db.sequelize.fn('SUM', db.sequelize.col('score')), 'score']
  ],
  include: [{
    model: db.User,
    required: true,
    attributes: ['username']
  }],
  group: ['UserID']
}).then((results) => {
  ...
})
9wbgstp7

9wbgstp72#

也许可以试试这个(我假设您已经将PicksUsers联系起来了),您可以通过pick.user.username访问user.name:

Picks.findAll({
    attributes: ['UserID', [sequelize.fn('SUM', 'score'), 'sumScore']]
    groupBy: ['UserID']
    include: [
        model: Users
    ]
});
ycl3bljg

ycl3bljg3#

此域的网站不再提供此工具。它现在充满了广告和可能的恶意软件。

我知道这个问题是旧的,但这个答案可能会帮助其他人。我已经找到了一个在线转换器,可以转换原始SQL到Sequelize。
链接为https://pontaku-tools.com/english/
当从这个网站转换我得到了以下回应。

Picks.hasMany(Users,{foreignKey: '', as: 'u'});

var _q = Picks;
_q.findAll({
include: [{model: Users, as: 'u', required: false,}, ],
attributes: [[sequelize.fn('SUM', sequelize.col('p.score')), 'p.score'],['p.UserID', 'p.UserID'],['u.username', 'u.username']],
group: [''],
});
idv4meu8

idv4meu84#

使用 sequelize 函数 编写 sql 查询 可能 并 不 总是 很 简单 , 有时 我 建议 通过 将 它 与 此 函数 组合 来 运行 您 的 普通 sql 查询 。

const { QueryTypes } = require('sequelize');

async message_page (req,res) {  
      const messagePage = await db.query("SELECT * FROM ..", { type: QueryTypes.SELECT });
      return messagePage;},

中 的 每 一 个

相关问题