世の中には、ありがた迷惑とか、小さな親切大きなお世話とか、そういうことがわからない人が一杯いるようだ。
そういう人は、「やるな!」「やらないでくれ!」っていっても、「やる」のだなぁ。
人のやること横取りするんじゃないよ!と、叫びたかった、今日の朝。
それはそうと、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のコマンド実行では、ちゃんと動いた。
ホント、統一させてほしいんですけど。