0

我有这两张桌子:

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 中的数据以及我想要的输出。

4

1 回答 1

0

我想你快到了。您需要添加一个额外的 ON 子句来匹配 Date 字段,并且可以使用 IFNULL 来获得正确的 Day_status。

SELECT t2.UserID,t2.Date,t2.Time,t2.Height,IFNULL(t1.Day_status,'Normal')
FROM table2 t2 
    LEFT JOIN table1 t1
    ON  t2.UserID = t1.UserID 
    AND t1.Day_status !='Ignore' 
    AND t2.`Date`=t1.`Date`
于 2012-04-07T15:53:55.237 回答