【问题标题】:How do I convert a SQL query for Sequelize?如何为 Sequelize 转换 SQL 查询?
【发布时间】:2018-06-01 09:19:43
【问题描述】:

我有一个 SQL 查询(使用 mysql 作为 DB),现在我需要将其重写为 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 相同的结果。

【问题讨论】:

标签: sql node.js sequelize.js


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    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) => {
      ...
    })
    

    【讨论】:

      【解决方案3】:

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

      我知道这个问题很老,但这个答案可能对其他人有所帮助。 我找到了一个可以将原始 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: [''],
      });
      

      【讨论】:

      • 我尝试了使用 UPDATE + JOIN 的工具,但效果不佳
      • 可能不适合复杂的查询。
      • pontaku 工具网站已经不存在了。
      猜你喜欢
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 2021-10-11
      相关资源
      最近更新 更多