【问题标题】:prepared mysql query where value may be NULL准备好的mysql查询,其中值可能为NULL
【发布时间】:2019-01-11 21:19:02
【问题描述】:

我正在使用节点的 mysql 库并尝试执行如下查询:

connection.query(`SELECT * FROM table WHERE name = ? AND field = ?`, ['a', value]);

我遇到的问题是有时value = 1 但有时value = null

根据我的测试,只有当查询写为WHERE value IS null 并且不适用于WHERE value = null 时才会返回结果。

:如果值可能为空,我该如何使用准备好的查询?

【问题讨论】:

  • 在值为空的情况下,为什么不只使用两个查询和一个 if 语句在它们之间进行选择?
  • @EricYang 是对的。在将查询传递给 MySQL 之前处理逻辑。

标签: mysql node.js node-mysql


【解决方案1】:

很抱歉让你失望了,但是你不能

你应该使用不同的比较语句,即

  1. WHERE value IS NULL

  2. WHERE value = <your value>

关于 Mysql 参考,空值被区别对待,而且空值是一个缺失值。所以你不能对NULL使用算术比较

这里是参考https://dev.mysql.com/doc/refman/8.0/en/working-with-null.html

【讨论】:

  • 谢谢 - 所以我想我需要检查if (value === null),然后相应地使用=IS
  • @d-_-b 如果你需要空检查,那么你肯定需要使用 where values is null
【解决方案2】:

没有人提到宇宙飞船操作员<=>,它适用于 null 到 null 的比较

Here is great spaceship operator description

【讨论】:

    【解决方案3】:

    也许你想试试这个:

    SELECT * FROM table WHERE IFNULL(name, 'null') = 'null' AND IFNULL(field, 'null') = 'null'

    但是下一个问题,你不能用值'null'填充你的字段,否则它会使你的查询和数据模棱两可。

    【讨论】:

      猜你喜欢
      • 2011-03-25
      • 2020-11-02
      • 2013-10-19
      • 2018-08-29
      • 2010-09-24
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多