假设我有一个这样的 MySQL 表:
如何使用 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
。在这种情况下,它返回
qwert
和 zxcv
。在阅读了类似的 stackoverflow 问题 here 之后。我有点困惑,因为我只有一张 table 。我应该使用
hasMany
和 belongsTo
来在 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/