node.js - 如何在 node.js 中使用 sequelize 编写 mysql 连接查询?

标签 node.js sequelize.js

假设我有一个这样的 MySQL 表:

enter image description here

如何使用 sequelize 编写以下 MySQL 查询?

select mt.JobId 
from   MyTable as mt join MyTable as mt2 on mt2.JobId = mt.JobId
where  mt.TaskSeq = 0 and mt.TaskState = 'Done' and mt2.TaskSeq = 1 
and mt2.TaskState = 'New'

该查询返回 JobId 处于 taskA 状态且 Done 处于 taskB 状态的所有 New

在这种情况下,它返回 qwertzxcv

在阅读了类似的 stackoverflow 问题 here 之后。我有点困惑,因为我只有一张 table 。我应该使用 hasManybelongsTo 来在 sequelize 中创建 join 查询吗?

以下是我用于创建此表的 node.js 脚本的一部分
var MyTable = conn.define(
'MyTable',
{
    JobId: {
    type: Sequelize.STRING,
    unique: true
    },
    TaskName: {
    type: Sequelize.STRING
    },
    TaskSeq: {
    type: Sequelize.INTEGER
    },
    TaskState: {
    type: Sequelize.STRING
    }
},
{
    collate: 'utf8mb4_bin'
}
)

MyTable.sync()
module.exports = {
    MyTable, conn
}

这是我的 Sequelize 查询,它无法返回我需要的 JobId
MyTable.belongsTo(MyTable, {foreignKey: 'id'})
MyTable.findAll({
attributes: ['JobId'],
where: {
    TaskSeq: 0,
    TaskState: 'DONE'
},
include: [{
    model: MyTable,
    attributes: ['JobId'],
    where: {
        JobId: sequelize.col('MyTable.JobId'),
        TaskSeq: 1,
        TaskState: 'NEW'
    }
}]
}).then(result => {
    console.log(result)
})

最佳答案

是的,您需要定义关联,以便查询中的包含功能起作用。 http://docs.sequelizejs.com/manual/tutorial/associations.html

你的 MyTable.belongsTo(MyTable, {foreignKey: 'id'}) 没有使用正确的 id 是吗?如果您想加入 JobId,请使用它。我什至没有在上面的表格中看到和 id 列。

或尝试原始查询:

`sequelize.query('select mt.JobId from MyTable as mt join MyTable as mt2 on 
   mt2.JobId = mt.JobId where mt.TaskSeq = 0 and mt.TaskState = 'Done' and 
   mt2.TaskSeq = 1', { type: sequelize.QueryTypes.SELECT }
 ).then(myTables => {
   console.log(myTables)
 })`

关于node.js - 如何在 node.js 中使用 sequelize 编写 mysql 连接查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46030343/

相关文章:

mysql - 无法从已部署的 Kubernetes NodeJS 应用程序连接到 Google MySQL

type-conversion - 使用 Sequelize 更改列类型时定义转换

sequelize.js - Node Sequelize 查找 $like 通配符的位置

sql - 我如何在 sequelize 中编写这个 Raw Postgres 查询

node.js - PM2部署文件夹结构——如何使用/配置

javascript - 在 iOS 上运行 Node.js 作为服务器并让其他设备连接进来

node.js 无法使用 docker-compose 连接到 redis?

node.js - 引用错误 : DATABASE_URL is not defined when trying to connect to heroku postgres db using Sequelize

javascript - 如何在浏览器客户端使用nunjucks宏?

javascript - Express:为什么这个GET请求执行了两次?