【问题标题】:MySQL using JSON_ARRAYAGG in a SELECT IN clause?MySQL 在 SELECT IN 子句中使用 JSON_ARRAYAGG?
【发布时间】:2021-08-26 17:03:24
【问题描述】:

我们的数据库解决方案非常依赖 JSON,因此,我们的 SQL 查询都是基于 JSON 的(大部分情况下)。这包括广泛使用 JSON_ARRAYAGG()。

我遇到的问题是在 WHERE IN 中使用返回的索引数组,这根本不起作用。据我所知,这是一个简单的格式问题,MySQL 需要 () 封装,而 JSON 数组是 [] 封装。

例如:

SELECT COUNT(si.ID) AS item_count, JSON_ARRAYAGG(si.ID) AS item_array
FROM sourcing_item si;

返回:

7, [1,2,3,4,5,6,7]

我需要做的是编写一个复杂的嵌套查询,允许选择 JSON_ARRAYAGG 结果中的记录 ID。喜欢:

SELECT si.item_name
FROM sourcing_item si
WHERE si.ID IN item_array

当然上述方法不起作用,因为 MySQL 无法识别 [] 与 ()。

这个问题有可行的解决方法吗?我很惊讶他们没有更新 MySQL 以允许 WHERE IN 子句与 JSON 数组一起使用...

【问题讨论】:

    标签: mysql json select


    【解决方案1】:

    MEMBER OF 运算符会执行此操作。

    SELECT si.item_name
    FROM sourcing_item si
    WHERE si.ID MEMBER OF (item_array)
    

    【讨论】:

    • 比较新,是在MySQL 8.0中添加的。
    • 如果有子查询,为什么要使用JSON_ARRAYAGG()?只需使用WHERE sp.sourcing_search_ref_id IN (SELECT ss.ID FROM ...)
    • 尝试使用 JOIN 而不是 IN。这将允许您向上传递多个列。
    • 所有这些嵌套的 IN 应该只是所有 3 个表之间的连接。
    • 一般情况下SELECT * FROM A WHERE A.col1 IN (SELECT col2 FROM B)可以转化为SELECT A.* FROM A JOIN B ON A.col1 = B.col2
    猜你喜欢
    • 2010-12-07
    • 2016-06-08
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 2011-05-29
    • 2020-06-20
    • 1970-01-01
    • 2012-05-21
    相关资源
    最近更新 更多