0

我对以下简单的陈述感到有些困惑。

create table Test(id integer, data json);
insert into Test(id, data) values(1, '{"name": "vova"}');

select * from Test
where  json_extract(data, "$.name") IN ("vova", "mark");

这里 select 什么都不返回。但是,如果我在数组中留下一个元素,查询将返回预期的行:

select * from Test
where  json_extract(data, "$.name") IN ("vova");

'json_extract' 和 'where in' 似乎彼此不喜欢?或者我可能错过了什么?

这是一个带有示例的链接。当我在本地运行查询时,行为是相同的。

4

1 回答 1

1

如果您尝试评估

json_extract(data, "$.name")

-> 这将导致"vova"

意思是双引号,在这种情况下将您的IN运算符视为选择字符串值,添加单引号。

select * from Test
where  json_extract(data, "$.name") IN ('"vova"', '"mark"');
于 2019-12-19T03:07:33.487 回答