我有这两张桌子:
table1:
---------
UserID: Date: Day_status:
-----------------------------------
3004 2010-01-01 Normal
3004 2010-01-12 Normal
3004 2010-01-15 Ignore
3004 2010-01-18 Abnormal
4001 2010-01-09 Normal
4001 2010-01-11 Ignore
4001 2010-02-10 Normal
4001 2010-02-12 Abnormal
------------------------------------
table:2
-------
UserID: Date: Time Height
--------------------------------------------
3004 2010-01-01 08:01:02 35
3004 2010-01-01 09:01:12 32
3004 2010-01-01 18:01:02 40
3004 2010-01-02 07:01:02 20
3004 2010-01-02 08:01:02 30
3004 2010-01-02 10:01:02 10
3004 2010-01-08 07:01:02 20
3004 2010-01-08 08:01:02 30
3004 2010-01-08 10:01:02 10
3004 2010-01-12 07:01:02 30
3004 2010-01-12 09:01:02 50
3004 2010-01-12 18:01:02 30
3004 2010-01-15 07:01:02 30
3004 2010-01-15 09:01:02 50
3004 2010-01-15 18:01:02 30
3004 2010-01-18 07:01:02 30
3004 2010-01-18 09:01:02 50
3004 2010-01-18 18:01:02 30
4001 2010-01-08 07:01:02 30
4001 2010-01-08 08:01:02 30
4001 2010-01-08 09:01:02 40
4001 2010-01-08 13:01:02 30
4001 2010-01-09 07:01:02 30
4001 2010-01-09 08:01:02 30
4001 2010-01-09 09:01:02 40
4001 2010-01-11 08:01:02 30
4001 2010-01-11 09:01:02 30
4001 2010-01-11 18:01:02 30
4001 2010-01-12 08:01:02 30
4001 2010-01-12 09:01:02 30
4001 2010-01-12 18:01:02 30
4001 2010-01-13 08:01:02 30
4001 2010-01-13 09:01:02 30
4001 2010-01-13 18:01:02 30
4001 2010-02-12 08:01:02 30
4001 2010-02-12 09:01:02 30
4001 2010-02-12 09:01:02 30
-----------------------------------------------
请记住,在表 1 中:一个用户可以有多个“日期”(用户 3004 有多个日期)。并且,在表 2 中,
一个用户可以有多个“日期”,每个日期可以有多个“时间”。在表 2 中,用户 3004 对于日期“2011-01-01”有 3 个不同的“时间”,依此类推。
我想加入这两张桌子,这样,
1) 结果中包含 table2 中的所有数据和 table1 中的 Day_status 数据。
2)如果table1中table2的日期没有'Day_status',则结果中该日期的Day_status将显示为'Normal'(注意:表2的日期条目比table1多)
3)table1中Day_status='Ignore'的条目不会出现在最终结果中
输出将是这样的:
UserID: Date: Time Height Day_status_val
---------------------------------------------------------------
3004 2010-01-01 08:01:02 35 Normal
3004 2010-01-01 09:01:12 32 Normal
3004 2010-01-01 18:01:02 40 Normal
3004 2010-01-02 07:01:02 20 Normal
3004 2010-01-02 08:01:02 30 Normal
3004 2010-01-02 10:01:02 10 Normal
3004 2010-01-08 07:01:02 20 Normal
3004 2010-01-08 08:01:02 30 Normal
3004 2010-01-08 10:01:02 10 Normal
3004 2010-01-12 07:01:02 30 Normal
3004 2010-01-12 09:01:02 50 Normal
3004 2010-01-12 18:01:02 30 Normal
3004 2010-01-18 07:01:02 30 Abnormal
3004 2010-01-18 09:01:02 50 Abnormal
3004 2010-01-18 18:01:02 30 Abnormal
4001 2010-01-08 07:01:02 30 Normal
4001 2010-01-08 08:01:02 30 Normal
4001 2010-01-08 09:01:02 40 Normal
4001 2010-01-08 13:01:02 30 Normal
4001 2010-01-09 07:01:02 30 Normal
4001 2010-01-09 08:01:02 30 Normal
4001 2010-01-09 09:01:02 40 Normal
4001 2010-01-12 08:01:02 30 Normal
4001 2010-01-12 09:01:02 30 Normal
4001 2010-01-12 18:01:02 30 Normal
4001 2010-01-13 08:01:02 30 Normal
4001 2010-01-13 09:01:02 30 Normal
4001 2010-01-13 18:01:02 30 Normal
4001 2010-02-12 08:01:02 30 Abnormal
4001 2010-02-12 09:01:02 30 Abnormal
4001 2010-02-12 09:01:02 30 Abnormal
-----------------------------------------------
我使用以下查询来获取我的结果:
SELECT table2.UserID, table2.Date, table2.Time, table2.Height,
CASE
when table1.Day_status='Abnormal Day' then 'Abnormal Day'
when table1.Day_status='Normal Day' then 'Normal Day'
else 'Normal Day'
END as Day_status_val
FROM table2 LEFT JOIN table1
ON table2.UserID = table1.UserID and table1.Day_status !='Ignore'
但是,它给出了错误的结果。谁能帮我解决这个问题。请查看 table1 和 table2 中的数据以及我想要的输出。