首页 > 解决方案 > MySQL 使用带有子查询的 JSON_CONTAINS

问题描述

我正在尝试在内部进行子查询JSON_CONTAINS以获得这样的结果

SELECT * FROM addresses JSON_CONTAINS(`groups`, '"Client"', '$') ;

这是我尝试过的

SELECT * FROM addresses JSON_CONTAINS(
    `groups`, 
    (SELECT u.group FROM users u WHERE u.email = 'example@email.org' LIMIT 1),
    '$'
) ;

但是由于 subery 查询返回Client而不是"Client"JSON_CONTAINS 不接受该值。

错误 3141 (22032):函数 json_contains 的参数 1 中的 JSON 文本无效:“值无效。” 在位置 0。

标签: mysqlsqljsonwhere-clausemysql-8.0

解决方案


您可以在子查询中连接双引号:

SELECT * 
FROM addresses 
WHERE JSON_CONTAINS(
    `groups`, 
    (SELECT CONCAT('"', u.group, '"') FROM users u WHERE u.email = 'example@email.org' LIMIT 1),
);

请注意,这$是 的第三个参数的默认值JSON_CONTAINS()

我对子查询很怀疑:

  • 您不想将其与外部查询相关联吗?

  • LIMIT没有ORDER BY可能不会表现一致


推荐阅读