1

table1 と table2 の 2 つのテーブルがあります。両方のテーブルの現在の状態は次のとおりです。

表1:

id   type mon   tue   wed   thu   fri   sat   sun  
1    ets  NULL  NULL  NULL  NULL    NULL    NULL    NULL 
1    ets  NULL  NULL  NULL  NULL    NULL    NULL    NULL 
1    eta  NULL  NULL  NULL  NULL    NULL    NULL    NULL 
1    eta  NULL  NULL  NULL  NULL    NULL    NULL    NULL 
1    cl   NULL  NULL  NULL  NULL    NULL    NULL    NULL 
1    cl   NULL  NULL  NULL  NULL    NULL    NULL    NULL 
2    ets  NULL  NULL  NULL  NULL    NULL    NULL    NULL 
2    ets  NULL  NULL  NULL  NULL    NULL    NULL    NULL 
2    eta  NULL  NULL  NULL  NULL    NULL    NULL    NULL 
2    eta  NULL  NULL  NULL  NULL    NULL    NULL    NULL 
2    cl   NULL  NULL  NULL  NULL    NULL    NULL    NULL 
2    cl   NULL  NULL  NULL  NULL    NULL    NULL    NULL 

テーブル 2:

id  ets eta cl
1   mon tue wed
1   thu fri sat
1   sun mon tue
2   sat sun mon
2   fri sat sun

table2 の列の名前は、table1 の列 'type' であることに注意してください。table1.id が table2.id と一致するように、列 mon-sun が table2 で見つかったそれぞれの「タイプ」 (ets、eta、または cl) のすべての値を更新するように、table1 を更新したいと考えています。

私が望む結果のテーブルは、上記のデータに対して以下のようになります。

id   type mon   tue   wed   thu   fri   sat   sun  
1    ets  1     NULL  NULL  1     NULL  NULL    1 
1    ets  1     NULL  NULL  1     NULL  NULL    1
1    eta  1     1     NULL  NULL  1     NULL    NULL 
1    eta  1     1     NULL  NULL  1     NULL    NULL
1    cl   NULL  1     1     NULL  NULL  1       NULL 
1    cl   NULL  1     1     NULL  NULL  1       NULL
2    ets  NULL  NULL  NULL  NULL  1     1       NULL 
2    ets  NULL  NULL  NULL  NULL  1     1       NULL 
2    eta  NULL  NULL  NULL  NULL  NULL  1       1 
2    eta  NULL  NULL  NULL  NULL  NULL  1       1 
2    cl   1     NULL  NULL  NULL  NULL  NULL    1 
2    cl   1     NULL  NULL  NULL  NULL  NULL    1  

私が適用している UPDATE クエリは次のとおりです。

update a
set a.mon = case b.ets when 'mon' then '1' else '0' end,
a.tue = case b.ets when 'tue' then '1' else '0' end,
a.wed = case b.ets when 'wed' then '1' else '0' end,
a.thu = case b.ets when 'thu' then '1' else '0' end,
a.fri = case b.ets when 'fri' then '1' else '0' end,
a.sat = case b.ets when 'sat' then '1' else '0' end,
a.sun = case b.ets when 'sun' then '1' else '0' end
from table1 a, table2 b
where a.id = b.id and a.type = 'ets'

最初に、id と一致する table2 の ets のテーブルtable1.type = 'ets'とそれぞれの値を同時に更新することを検討してください。

上記のクエリは、table2 から最初に一致する値のみを取得し、table1 でそれを更新し、残りは更新しません。

どんな助けでも大歓迎です。

4

1 に答える 1