こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL初心者です。

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

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

投稿日時 - 2012-08-28 00:55:44

QNo.7667198

すぐに回答ほしいです

質問者が選んだベストアンサー

>※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条件を書くようにしてください。

投稿日時 - 2012-08-28 09:39:41

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問