先日の質問に関連しています。
SQLiteのファイルがあって、テーブルがふたつあります。
J-POPの曲をテーブルに収めてあります。
SQL
1CREATE TABLE oriconranking( 2 year int, 3 rank int, 4 title text, 5 artist text, 6 releasedate text 7 ); 8CREATE TABLE songs( 9 artist text, 10 title text, 11 lyricist text, 12 composer text, 13 releasedate text, 14 lyricURL text, 15 memo text, 16 lyric text);
テーブルoriconrankingには、年ごとにランクインした曲のタイトル、アーティストなどが入っています。
select * from oriconranking where title = '恋';
するとこういう感じです。
2017|24|恋|星野源|2016/10/05
2016|32|恋|星野源|2016/10/05
1980|34|恋|松山千春|1980/01/21
2017年に恋という曲が24位にランクインし、同一の曲が2016年に32位にランクインしていて、さらにちがう曲が1980年にもランクインしていることがわかります。
テーブルsongsには、たくさんの曲の情報が入っています。いまはオリコンにランクインしている曲しか入っていませんが、いずれオリコンには関係なく、いろんな曲の情報を入れたいです。
select * from songs where title = '恋するフォーチュンクッキー';
するとこういう感じです。
AKB48|恋するフォーチュンクッキー|秋元康|(略)|oricon2014|(略)
AKB48|恋するフォーチュンクッキー|秋元康|(略)|oricon2013|(略)
何年にランクインしているかがカラムmemoに「oricon0000」の感じで書いてあります。
テーブルsongsには、1曲につき1レコードにしたいのに、いま重複があるのでだめです…。
解消してきれいに作り直したいです。
作り直す方針としては、先日の質問でyonaさんに回答いただいたようにしたいです。
oriconranking2テーブルを以下のように作ろうと思っています。
oriconranking2テーブル
id:プライマリーキー
song_id:songsのプライマリーキー
year:ランクインした年(2017,2016等)
このように作り替えるにはどうしたらいいでしょうか?
わたしは、
0. テーブルsongsにカラムsongidを作って、rowidを当てる。
0. Pythonを使って、forループでテーブルsongsを1レコードずつなぞる。
0. カラムmemoを見て、それをテーブルoriconranking2に転記する。
0. カラムtitleとカラムartistを見て、いま注目しているレコードと重複していたらそのレコードを削除?
とかってやったらできるかな?と思うんですが、重複を解消する方法を考えていたら混乱してきました…。
SQLのほかにはPythonならすこし使えると思います。
お知恵を貸していただけたらうれしいです!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/24 00:16
2017/11/24 01:10
2017/11/24 08:44 編集
2017/11/24 14:25
2017/11/24 15:04 編集
2017/11/25 01:33