質問: 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 ) ) わかりにくい部分もあると思いますが、ご教授お願いします。
回答: >※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条件を書くようにしてください。