2017-01-26 6 views
2

SQL文から私の会社のコードにこの奇妙なバグがありました。基本的にはテーブルからすべての行を更新していました。コードは以下の通りです。テーブル内全体を選択するSQLのアポストロフィ

UPDATE table SET 'disconnections'=value WHERE 'connections'=(SELECT MAX('connections') FROM table) 

ここで、明らかに間違っている列名を囲むアポストロフィ。これはテーブル内のすべての行を更新していました。私たちはそれらを削除し、文章は期待どおりに機能しました。それはどうしたの?

ありがとうございます!

+1

どのデータベースを使用していますか?あなたはそのキャラクターが 'ではない'と確信していますか? –

+0

タグ正しいDBMSをください – ADyson

+0

ANSI SQLでは、単一引用符は文字列リテラル用です。 「あるテキスト」。識別子には二重引用符を使用します。 '' column-name "'となります。 – jarlh

答えて

3

問題はMAX('connections')です。明らかに、単一のクォータの代わりに ``を使用したい場合は''です。あなたのケースでは、'connections'はフィールド名ではなく文字列定数です。だからMAX(constant) = constant。この条件は名前 `connections`のフィールドに依存しないため、テーブルのすべてのレコードでTRUEです。

私はそれがMySQLだと思うので、フィールド名を参照したいのであれば、 ''の代わりに ``を使うべきです。

関連する問題