質問: REPLACE(`hoge`,0,''); ``` 質問背景 SQL構文エラーになった際、書き方が悪いのか、そもそもこんな構文はないのかいつも迷います。 環境 MySQL5.7
回答: 単純にwhere句で処理対象のレコードを絞るかテーブルの全レコードに対して更新処理するかの違いです。 例えば下記のレコードがあった場合... | id | hoge | | --- | --- | | 1 | 0 | | 2 | 1 | | 3 | 0 | | 4 | 2 | 前者のwhere句を使ったSQLでは、最初にwhere句で更新対象を`id`が1,3の行に絞ってから**2レコードのみ**更新処理を行います。 | id | hoge | | --- | --- | | 1 | 0 | | 2 | 1 | | 3 | 0 | | 4 | 2 | 後者のwhere句を用いない処理では`id`が1から4まで全レコードに対して更新処理を行います。 例え更新後の結果が更新前と同一であっても、内部的には各レコードすべてが上書きされます。 (つまり`id`2,4はそれぞれ元の値と同じ1,2が代入されます) 実際にrow_count()を使って更新件数を確認すると、後者は全レコードが更新されていることが分かります。 DB Fiddle 通常は両方を使い分けるのではなく前者を使用してください。 後者はテーブルの完全スキャンが発生してDB負荷が高いので明確な理由がなければ使う意味がありません。