2011-11-24 55 views
0

我有以下表格,用户这是自我解释和回答其中包含对特定用户的特定日期的响应列表。MySQL视图问题

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 

我一直在努力做这一个SELECT语句,但我不相信这是可能的,也许我错过了什么?我可以用多个语句完成输出,但我正在寻找一种更优雅的方法,可以坐在视图(或多个视图)中。

在此先感谢!

回答

2

这应该工作,但我建议不要使用它,除非答案表将永远是相当小:

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 
+0

完美!谢谢! – schone

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 
0

试试这个

select t3.user_id, t3.created_at, a.response 
from 
(select t2.user_id as user_id, t1.created_at as created_at, null 
from 
(select distinct created_at 
from answers) t1, users t2) t3 answers a 
where t3.user_id = a.user_id and t3.created_at = a.created_at 

为空值,我想LEFT OUTER JOIN将工作

select t3.user_id, t3.created_at, a.response 
from 
(select t2.user_id as user_id, t1.created_at as created_at, null 
from 
(select distinct created_at 
from answers) t1, users t2) t3 LEFT OUTER JOIN answers a 
ON t3.user_id = a.user_id and t3.created_at = a.created_at 
+0

感谢但子查询不允许在MySQL视图。 – schone

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