0

私は次の表、自明のユーザー、および特定のユーザーの特定の日付の応答のリストを含む回答を持っています。

users
-----
ID   FIRST_NAME   LAST_NAME
1    Joe          Bloggs  
2    Fred         Sexy
3    Jo           Fine
4    Yo           Dude
5    Hi           There

answers
-------
ID   CREATED_AT   RESPONSE   USER_ID
1    2011-01-01   3          1
2    2011-01-01   4          2
3    2011-01-02   5          5

私の目的は、次を出力するビューを構築することです。

USER_ID   CREATED_AT   RESPONSE
1         2011-01-01   3
2         2011-01-01   4
3         2011-01-01   NULL
4         2011-01-01   NULL
5         2011-01-01   NULL
1         2011-01-02   NULL
2         2011-01-02   NULL
3         2011-01-02   NULL
4         2011-01-02   NULL
5         2011-01-02   5

私はこれを 1 つの SELECT ステートメントで実行しようとしましたが、それが可能だとは思いません。何か不足している可能性がありますか? 複数のステートメントで出力を達成できますが、ビュー (または複数のビュー) に収まるよりエレガントな方法を探しています。

前もって感謝します!

4

4 に答える 4

1

これは機能するはずですが、回答テーブルが常にかなり小さい場合を除き、使用しないことをお勧めします。

select u.id user_id,
       a.created_at,
       max(case when a.user_id = u.id then response end) response
from users u
cross join answers a
group by u.id, a.created_at
于 2011-11-24T12:12:43.427 に答える
0

これはうまくいきますが、応答がない場合に NULL を返す代わりに、0 を返します。

  select 
    distinct u.id, a.created_at, MAX(IF(u.id=a.user_id, a.response, 0)) response
  from users u, answers a
    group by id, created_at
    order by created_at, u.id
于 2011-11-24T12:44:53.110 に答える
0
select users.id as user_id, created_at, response from users
  left outer join answers on users.id = answers.user_id
  order by created_at, users.id
于 2011-11-24T11:45:37.667 に答える