首页  >  问答  >  正文

为什么 MySQL 中只有列名而没有等于值的 where 不是语法错误

为什么这样的查询不是语法错误?我有 SQL Server 背景,我真的很惊讶。

从 my_table WHERE id 中选择 *

我认为它会验证它是否具有值,但行为并不一致,使用 id 时它会返回具有 id 的位置,但使用 name 时它不会返回任何内容:

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

P粉481815897P粉481815897399 天前625

全部回复(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
  • 取消回复