检查元素是否包含在 MySql 中的 json 列的值(数组)中

Check if an element is contained in the values ​(array) of a json column in MySql

我在 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 中制定这样的查询。我会经常需要它们!

提前致谢!

应该这样做:

SELECT name, data 
FROM articolo 
WHERE JSON_CONTAINS(data, '"8"', '$.fornitori')

8 周围的双引号很重要,以便正确匹配 JSON 数据。另一方面,查询始终对字符串文字使用单引号。

您可以使用

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