背景知识
在 MariaDB 中,如果你需要查询包含多个记录的 JSON 字段,并且希望检查 number 字段的值是否在指定的集合中,可以使用 JSON_EXTRACT 函数结合 IN 操作符。
示例
假设有一个表 data_items,其中有一列 metadata 存储了 JSON 数据,如下所示:
{
"name": "example1",
"number": "647"
}
{
"name": "example2",
"number": "648"
}
使用以下 SQL 查询来检查 name 字段的值在(example1,example2)的集合中的记录
SELECT *
FROM data_items
WHERE JSON_EXTRACT(metadata, '$.name') IN ("example1", "example2");
但是如果使用IN ("example1") 则可以产生一条记录
问题&解决
按上述SQL执行并没有按预期产生2条查询结果,解决方法是将IN ("exapmpe1", "example2"),改为IN ('"exapmpe1"', '"example2"'),即用单引号括起来,就可以正常执行。
但如果是一个查询条件,就需要去掉单引号,像这样IN ("exapmpe1")才能正常执行。
相关资料
SQL中字符串变量主要用单引号''来表示,虽然有些时候双引号也能生效,但是应尽量用单引号。此例中IN中只放一个双引号值能查出结果可能是IN函数做了某些特殊处理,但是这样会给更通用的情况造成混淆,所以还是应使用单引号。