当所述列的值为 NULL 时,我在可空列上使用 JSON_extract 函数的 where 语句得到确认?

Posted

技术标签:

【中文标题】当所述列的值为 NULL 时,我在可空列上使用 JSON_extract 函数的 where 语句得到确认?【英文标题】:My where statement with a JSON_extract function on a nullable column is confirmed when said column's value is NULL? 【发布时间】:2017-06-20 19:09:58 【问题描述】:

我有一个带有 JSON_extract 方法的 where 语句。 JSON_extract 使用名为new_valueold_value 的可为空列。如果列包含 JSON 字符串,则检查有效,但当列为 NULL 时,where 语句得到确认。

->where(function($query) use ($other_key, $new_change) 
        $query->where(DB::raw('json_extract(old_value, "$.theme_id") = 1))
            ->orWhere(DB::raw('json_extract(new_value, "$.theme_id") = 1));

new_valueold_value 为NULL 时,该行被返回,但NULL 的theme_id 显然不等于1。有人能解释一下这里发生了什么吗?

【问题讨论】:

【参考方案1】:

这个:

->where(function($query) use ($other_key, $new_change) 
    $query->where(DB::raw('json_extract(old_value, "$.theme_id") = 1))
        ->orWhere(DB::raw('json_extract(new_value, "$.theme_id") = 1));

应该是:

->where(function($query) use ($other_key, $new_change) 
    $query->where(DB::raw("json_extract(old_value, '$.theme_id')"), 1);
        ->orWhere(DB::raw("json_extract(new_value, '$.theme_id')"), 1);

这就是 Laravel 中 where 语句的工作方式。我没有插入第二个参数,这就是 Laravel 假设我正在检查 NULL 的原因。现在可以了,对不起我的愚蠢。

【讨论】:

以上是关于当所述列的值为 NULL 时,我在可空列上使用 JSON_extract 函数的 where 语句得到确认?的主要内容,如果未能解决你的问题,请参考以下文章

mysql常见的优化需要注意的点

可空列的行为并非如此

如何使用 MYSQL 中的连接从多个表中获取多个列并在非空列上显示数据以及在空列上显示 null 或零

如何在 oracle 中使可空列不为空

当另一列具有特定值时,列上的 NOT NULL 约束

如何在数据帧中沿值的一列生成随机均匀分布而不必对所述列中的每个值重复?