MySQL 对子查询使用 JSON_CONTAINS

MySQL use JSON_CONTAINS with a subquery

我正在尝试在 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),
    '$'
) ;

但是由于子查询 returns Client 而不是 "Client" JSON_CONTAINS 不接受该值。

ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_contains: "Invalid value." at position 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 可能表现不一致