世の中には、ありがた迷惑とか、小さな親切大きなお世話とか、そういうことがわからない人が一杯いるようだ。
そういう人は、「やるな!」「やらないでくれ!」っていっても、「やる」のだなぁ。
人のやること横取りするんじゃないよ!と、叫びたかった、今日の朝。
それはそうと、SQLiteでSELECT文を使ってUPDATEしたい!というのがあって、
そうすると、まぁ、
UPDATE table1 SET col1 = (SELECT col1 FROM table2 WHERE .... )
みたいにすればできるぜ!みたいなことはいっぱい書いてあるんだけど・・・
そうじゃないんです!
JOINで連結させて、ホゲホゲホゲ・・・とやりたいんです!
という要求は満たされないわけ。
で、調べた。
SQLiteはWITH句が使えるらしい。
んで、WITH句をうまく活用して、UPDATEできるらしい。
他のDBのSQL文を
UPDATE table1 SET col1 = a.col1 , col2 = a.col2 FROM (SELECT .... FROM .... INNER JOIN ....) a WHERE table1.id = a.id
とすると、
WITH句を使ったSQL文は
WITH a AS ( SELECT .... FROM .... INNER JOIN .... ) UPDATE table1 SET col1 = (SELECT col1 FROM a WHERE table1.id = a.id) , col2 = (SELECT col2 FROM a WHERE table1.id = a.id)
みたいな感じ。
で、これを私が愛用する「A5:SQL Mk-2」(SQL開発ツール)で実行したのだが、うまくいかずに、「あれ?できないの?」とか思って悩んだのだが、ツール上ではうまくいかないだけで、SQLiteのコマンド実行では、ちゃんと動いた。
ホント、統一させてほしいんですけど。