https://teratail.com/questions/227186
状況は以前ご質問したこれと同じです。
tableAとtableBがIDで対応づいていて、tableBの内容をもとにtableAをupdateしたいです。
このときと同じような感じでupdateしてみました。
やりたいことはできましたが、完了に70分かかりました…。
tableAのレコード数:24万行
tableBのレコード数:29万行
更新対象のレコード数:900行
更新対象のカラム数:6カラム
カラム6つあるのでこういう感じのsql文を書きました。
sql
1update tableA set 2answer1 = (select answer1 from tableB where A_ID=tableA.ID), 3answer2 = (select answer2 from tableB where A_ID=tableA.ID), 4answer3 = (select answer3 from tableB where A_ID=tableA.ID), 5answer4 = (select answer4 from tableB where A_ID=tableA.ID), 6answer5 = (select answer5 from tableB where A_ID=tableA.ID), 7answer6 = (select answer6 from tableB where A_ID=tableA.ID) 8where exists( 9select answer1 from tableB where is_reliable=1 and A_ID=tableA.ID 10-- tableAのあるカラムが空欄であるレコードが対象であることがわかっているので絞ってみた。 11-- 対象のレコード数が24万行から4万行ぐらいになった。 12and tableA.somecolumn = ''; 13);
同じようなサブクエリをたくさん書いているのがスマートじゃないような気がしています。
coalesceを使ったsql文を先に書いてみましたが、そちらは30分待っても動かなかったのでキャンセルしてしまいました
(もう少し待ってみてもよかった……)。
もう少し早く動かせる方法はありそうでしょうか?
こういう場合どこが一番ネックになっていますか?
sqlite 3.24.0
回答1件
あなたの回答
tips
プレビュー