检查一个元素是不是包含在MySql中一个json列的值(数组)中
Posted
技术标签:
【中文标题】检查一个元素是不是包含在MySql中一个json列的值(数组)中【英文标题】:Check if an element is contained in the values (array) of a json column in MySql检查一个元素是否包含在MySql中一个json列的值(数组)中 【发布时间】:2021-02-08 14:15:14 【问题描述】:我在mysql的一个json列的一个单元格内有以下值:
"produttori": [
"8",
"9"
],
"articoli_alternativi": [
"3",
"9"
],
"articoli_accessori": [
"5",
"6",
"7",
"8"
],
"tecnologie": [],
"fornitori": [
"9",
"8"
],
"classificazioni": [
"3",
"4"
]
我想做一个查询,根据数组中 fornitori
键处的值的存在来提取数据。
现在我已经尝试过了:
query = 'SELECT nome, formulati_commerciali FROM articolo WHERE JSON_CONTAINS(JSON_EXTRACT(dati, "$.fornitori"), "' + \
value+'", "$")'
哪个打印是:
SELECT name, data FROM articolo WHERE JSON_CONTAINS(JSON_EXTRACT(data, "$.fornitori"), "8", "$")
基本上条件是value
("8"
) 必须在fornitori
列表内,否则跳过该元素。
不幸的是,查询没有产生任何结果。
我想知道如何在 MySql 中制定这样的查询。我会经常需要它们!
提前致谢!
【问题讨论】:
【参考方案1】:你可以使用
SELECT data
FROM
(
SELECT @i := @i + 1 AS rn,
JSON_UNQUOTE(JSON_EXTRACT(data,CONCAT('$.fornitori[',@i-1,']'))) AS elm,
data
FROM information_schema.tables
CROSS JOIN articolo
CROSS JOIN (SELECT @i := 0) r
) q
WHERE elm = 8
为了在一个特定的范围内搜索特定的值
数组("fornitori"
)
Demo
【讨论】:
JSON_CONTAINS
更容易...【参考方案2】:
应该这样做:
SELECT name, data
FROM articolo
WHERE JSON_CONTAINS(data, '"8"', '$.fornitori')
8
周围的双引号很重要,以便正确匹配 JSON 数据。另一方面,查询始终对字符串文字使用单引号。
【讨论】:
SirJSON_CONTAINS()
是预定义函数吗?
@KUMAR dev.mysql.com/doc/refman/8.0/en/…(手册页适用于 8.0,但功能自 5.7.8 起存在)以上是关于检查一个元素是不是包含在MySql中一个json列的值(数组)中的主要内容,如果未能解决你的问题,请参考以下文章
在 Oracle PL/SQL 中,如何检查 JSON 对象是不是包含特定键的元素