如何将 SQL-query 转换为 Sequelize?
How can I convert SQL-query to Sequelize?
我有这个 SQL 查询:
SELECT *
FROM chats
JOIN (SELECT *
FROM messages
WHERE messages.id
IN (SELECT MAX(messages.id)
FROM messages
GROUP BY messages.chatId))
AS lastMessage
ON chats.id = lastMessage.chatId
WHERE chatGroupId = 1
ORDER BY lastMessage.createdAt DESC
它 returns 给定聊天中的最后一条消息。
但是我完全不明白如何在Sequelize中执行这一刻IN (SELECT MAX(messages.id) FROM messages GROUP BY messages.chatId)) AS lastMessage ON chats.id = lastMessage.chatId
...
您可以这样使用 Sequelize.literal
:
const message = await Chats.findAll({
where: {
chatGroupId: 1
},
include: [{
model: Messages,
required: true,
where: Sequelize.where(
Seqeulize.col('messages.id'),
Op.in,
Sequelize.literal('(SELECT MAX(m2.id) FROM messages as m2 WHERE m2.chatId = chat.id)')
)
}]
})
我有这个 SQL 查询:
SELECT *
FROM chats
JOIN (SELECT *
FROM messages
WHERE messages.id
IN (SELECT MAX(messages.id)
FROM messages
GROUP BY messages.chatId))
AS lastMessage
ON chats.id = lastMessage.chatId
WHERE chatGroupId = 1
ORDER BY lastMessage.createdAt DESC
它 returns 给定聊天中的最后一条消息。
但是我完全不明白如何在Sequelize中执行这一刻IN (SELECT MAX(messages.id) FROM messages GROUP BY messages.chatId)) AS lastMessage ON chats.id = lastMessage.chatId
...
您可以这样使用 Sequelize.literal
:
const message = await Chats.findAll({
where: {
chatGroupId: 1
},
include: [{
model: Messages,
required: true,
where: Sequelize.where(
Seqeulize.col('messages.id'),
Op.in,
Sequelize.literal('(SELECT MAX(m2.id) FROM messages as m2 WHERE m2.chatId = chat.id)')
)
}]
})