memorandums

日々のメモです。

Fusion TableでUpdate実行するときにはWHERE句が必須のようです

ここ(↓)に書いた通り、簡易クリッカーシステムをGASで作っているのですが、テーブル情報を更新する必要があり、ちょっとはまりました。

Google App ScriptとFusion Tableで簡易クリッカーアプリ - memorandums

ヒントは以下でした。ありがたやありがたや。

qiita.com

一般的なSQLではWHERE句なしでUPDATEを実行すると全レコードが更新されるわけですが、上記の記事によると、Fusion Tableでは最初にヒットした1レコードしか更新されないんだそうです。

私の用途ではフラグ的なレコードで1レコードしか存在しないので、そもそもWHERE句なんて必要ないだろと思って

UPDATE テーブル名 SET A='YES'

などと実行したのですが、ぜんぜん変更される気配がありません。さらにスクリプトを実行するとエラーが。。。

onfailureのメッセージを読むと以下のようなものでした。

ScriptError: Invalid query: Parse error near ';' (line 1, position 65). Expecting WHERE instead.

ここからは想像なのですが、上記のQiitaの記事と上記のエラーメッセージをなんとなく考えるとWHERE句が必要なんだ。。。ということが見えてきます。

ちなみにROWIDはレコード一覧には表示されないので、1レコードだけ選択して表示する必要があります。Qiitaの記事ではSELECTした結果を利用しているようです。僕の場合は1レコードしかないので手動でOKです。調べてみると(下図)ちなみにROWIDは1であることがわかりました。

f:id:ke_takahashi:20180501145814p:plain

で、SQLを書き直すと動作しましたよ、ということでした。

UPDATE テーブル名 SET A='YES' WHERE ROWID=1

まぁ、いろいろありますね。