0

私はこの2つのテーブルを持っています:

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

table1 では、ユーザーは複数の「日付」を持つことができることに注意してください (ユーザー 3004 には複数の日付があります)。そして、表2では、

ユーザーは複数の「日付」を持つことができ、各日付は複数の「時間」を持つことができます。テーブル 2 では、ユーザー 3004 には、日付「2011-01-01」などの 3 つの異なる「時間」があります。

これら2つのテーブルを結合したいので、

1) table2 のすべてのデータと、table1 の Day_status データのみが結果に含まれます。

2) table1 の table2 の日付の「Day_status」がない場合、結果のその日付の Day_status は「通常」として表示されます (注: テーブル 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 句を追加する必要があり、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 に答える