「みんな教えて! 選手権!!」開催のお知らせ

【Table1】
Col1 Col2
Aa A
Ab A
Ba B
Bb B
Ca C
Ca D

【Table2】(Data1は固定)
Data1 Data2
Aa A
Ab B→A
Ba C→B
Bb A→B
Ca B→C
Ca C
※Col1に重複がある場合、重複結果の1行目のレコードをData2に入れる
(今回の場合CをData2に入れる)

Data1は固定で、Table1を使ってData2を上記の様に修正するSQLが書けなくて困っています。

Col1が重複してない場合の修正するSQLを書いてみましたが(合っているかはわかりませんが...)、
重複する場合のSQLも追加して最終的に1つのSQLで、すべて修正できるようにしたいです。
update Table2 T2
 set Data2=
 (select Col2 from Table1
 where Col1=
  (select Col1 from Table1 T1
  where T2.Data1=T1.Col1
  group by T1.Col1
  having count(T1.Col1)=1
 )
)

わかりにくい部分もあると思いますが、ご教授お願いします。

A 回答 (1件)

>※Col1に重複がある場合、重複結果の1行目のレコードをData2に入れる


の「1行目」の定義がハッキリ書かれていませんが、
例を見ると一番小さな値ということでいいのでしょうか。

それなら単純に、

UPDATE Table2 T2
SET Data2 =
(SELECT MIN(T1.Col2)
FROM Table1 T1
WHERE T1.Col1 = T2.Data1);

でいいのではないでしょうか。
ただ、このSQLだとTable1にTable2のData1と一致するデータがない場合は
NULLに更新されてしまうので気を付けてください。
もし、そういうデータが存在するのであれば
UPDATE文のWHERE句にEXISTS条件を書くようにしてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報