4

假设我有三张桌子:

  • users带有名称 ID
  • emails包含具有其电子邮件地址的行
  • messages包含包含其电子邮件日期和标题的行

当然,第二个和第三个表都可以使用用户 ID 与第一个表匹配。

我想要一个查询,它只返回每个用户一次,他们的电子邮件地址和他们最近消息的日期。

如果我使用这个:

SELECT name,email,title,date
FROM users
JOIN emails ON users.id = emails.user_id
JOIN messages ON messages.user_id = emails.user_id
group by name
order by date desc

我没有收到最新消息,因为排序是在加入和分组之后发生的。我每人收到一封来自我的用户的电子邮件,这些电子邮件按日期排序。

这可以一次完成吗?我错过了什么?

Pastebin 用于您可以使用的虚拟数据库:http: //pastebin.com/1x273aEe - 实际数据库与此不完全相同,但问题相同。

4

1 回答 1

3
SELECT  a.*, b.*, c.*
FROM    users a
        INNER JOIN emails b
            ON a.ID = b.user_ID
        INNER JOIN messages c
            ON a.ID = c.user_ID
        INNER JOIN
        (
            SELECT user_id, MAX(date) maxDate
            FROM messages
            GROUP BY user_ID
        ) d ON c.user_ID = d.user_ID AND
                c.date = d.maxDate
于 2013-01-02T03:50:07.967 回答