【发布时间】:2013-05-19 11:34:00
【问题描述】:
我有这个 SQL(SQLite 数据库),它正确地从按会话 ID 分组的消息表中获取最新消息,其中消息的会话 ID 不是“无”。
SELECT * from messages
WHERE _id
IN (
SELECT MAX(_id)
FROM messages
WHERE conversation_id != 'none'
GROUP BY conversation_id
)
但是,我想使用对话表中的“未见回复”列(其中包含此对话的未见回复的数量)来排序发出的消息。
我试过这个:
SELECT * from messages
WHERE _id IN
(
SELECT max(_id) from messages m
JOIN conversations c
ON m.conversation_id = c.cid ORDER BY
c.unseenreplies DESC
where m.conversation_id != 'none' group by m.conversation_id )
但在“where”子句附近出现语法错误。
作为解释,'conversation id' 不是会话表的主键,而是一个标识符字符串。
我该如何解决这个问题?我的 JOIN 方法是否可行?
【问题讨论】:
-
Mahmoud 为您提供了一个可行的查询。你遇到的问题是你的条款的顺序。您在 where 子句之前有 order by 子句。 Order by 子句几乎总是查询的最后一个子句。