4

私が3つのテーブルを持っているとしましょう:

  • users名前ID付き
  • emailsメールアドレスを持つ行を含む
  • messagesメールの日付とタイトルを含む行を含む

もちろん、2番目と3番目のテーブルはすべて、ユーザーのIDを使用して最初のテーブルと照合できます。

各ユーザー、メールアドレス、最新のメッセージの日付を1回だけ返すクエリが必要です。

これを使用する場合:

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

参加とグループ化の後に注文が行われたため、最新のメッセージが表示されません。ユーザーからそれぞれ1通のメールが届きます。メールは日付順に並べ替えられています。

これは1回の参加で実行できますか?私は何が欠けていますか?

使用できるダミーデータベースの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 に答える