【问题标题】: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 中制定这样的查询。我会经常需要它们!

提前致谢!

【问题讨论】:

    标签: mysql sql arrays json where-clause


    【解决方案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

    【讨论】:

    【解决方案2】:

    应该这样做:

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

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

    【讨论】:

    猜你喜欢
    • 2021-01-30
    • 2017-03-03
    • 2015-01-18
    • 1970-01-01
    • 2012-08-01
    • 2016-11-16
    • 2023-03-08
    相关资源
    最近更新 更多