検索

ホームページ  >  に質問  >  本文

MySQL にカラム名だけがあり、値に等しい箇所がないのはなぜですか? これは構文エラーではありません

なぜこのクエリは構文エラーではないのでしょうか?私は SQL Server の経験があるので、本当に驚きました。

my_table WHERE id から *

を選択します

値があることを検証すると思いましたが、動作に一貫性がありません。 id を使用すると、 id を持つ場所が返されますが、 name を使用すると何も返されません。

https://www.db-fiddle.com/f/enWGyAW4BtLC64PVzkbTVK/0

P粉481815897P粉481815897492日前699

全員に返信(1)返信します

  • P粉511896716

    P粉5118967162023-09-17 00:12:37

    MySQL には、標準 ANSI SQL に準拠しない動作がいくつかあります。この場合、MySQL は整数のゼロ値を false として扱い、ゼロ以外の整数値を true として扱います。標準 SQL では、整数はブール値と同じではありませんが、MySQL では同じです。

    クエリ WHERE id を実行すると、id ​​<> 0 の行が返されます。

    クエリ WHERE name を実行すると、文字列が整数として評価されます。つまり、先頭の数字 (存在する場合) の数値が取得され、後続の数字以外の文字は無視されます。先頭に数字がない場合、文字列の整数値は 0 になります。

    クエリ WHERE name を実行すると、その列に格納されている文字列の先頭にゼロ以外の数字がある場合にのみ行が返されます。あなたの例 'outro' には数字以外しか含まれていないため、値はゼロであり、条件を満たすことができません。

    MySQL は設計どおりに動作しますが、これは標準 SQL ではありません。

    返事
    0
  • キャンセル返事