【问题标题】:Is there a way how to compare array from JSON field against JSON_ARRAY in MySQL?有没有办法将 JSON 字段中的数组与 MySQL 中的 JSON_ARRAY 进行比较?
【发布时间】:2020-12-27 23:30:04
【问题描述】:

MySQL 表contacts

我有一个JSON类型的列responses,内容是

{"1": ["Yes", "No", "Maybe"], "2": ["Yes"], "3": ""}

我想知道是否可以在 SELECT 语句 -> WHERE 子句中找出​​第一个 JSON 元素是否与某个给定数组相等(它会改变)。

我的想法是这样的:

WHERE contacts.responses->>'$."1"' = JSON_ARRAY('Yes','No','Maybe')

但这不起作用(即使当两个比较端都包含在 SELECT 语句中时,它们也会同样显示 - '["Yes", "No", "Maybe"]')。那么,有没有其他方法可以做到这一点?

【问题讨论】:

    标签: mysql sql arrays json mysql-8.0


    【解决方案1】:

    你可以在 Mysql 8 The JSON Data Type 中使用很多功能

    您可以使用 JSON_EXTRACT 从列中的 json 中提取数据。您在问题中输入的数据是对象,您必须使用 $."1" 指向它。请注意必须使用$[1] 的数组。

    以下是您的数据和可能输出的示例。

    CREATE TABLE t1 (jdoc JSON);
    INSERT INTO t1 VALUES('{"1": ["Yes", "No", "Maybe"], "2": ["Yes"], "3": ""}');
    INSERT INTO t1 VALUES('{"1": ["YY", "XX", "Maybe"], "2": ["Yes"], "3": ""}');
    INSERT INTO t1 VALUES('{"1": ["Yes", "Maybe"], "2": ["Yes"], "3": ""}');
    
    select jdoc from t1 where JSON_EXTRACT(jdoc,'$."1"') = JSON_ARRAY('Yes','No','Maybe');
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多