mysql - 大型查询中的 JSON_CONTAINS
问题描述
提前道歉,我对 MySQL 中的 JSON 函数还是很陌生。
我有一个在结果中创建 json 对象的查询:
SELECT e.id as experiment,
JSON_ARRAYAGG(
JSON_OBJECT(
'id', c.id,
'type', c.type,
'value', c.value,
'taggable', 'experiments'
)
) as tagList
FROM Experiments e
LEFT JOIN Taggings d ON e.id = d.taggableId AND d.taggable = 'experiments' AND d.deletedAt IS NULL
LEFT JOIN Tags c ON d.tagId = c.id
GROUP BY e.id;
它返回以下内容:
实验 | 标签列表 |
---|---|
1 | [{“id”:56680,“type”:“disciplines”,“value”:“农学”,“taggable”:“experiments”},{“id”:56670,“type”:“disciplines”,“value “:“植物施肥,动物和人类营养”,“标记”:“实验”}] |
2 | [{“id”:56693,“type”:“disciplines”,“value”:“Animal Communications”,“taggable”:“experiments”}] |
3 | [{“id”:5624,“type”:“disciplines”,“value”:“RNA”,“taggable”:“experiments”}] |
我正在尝试使用JSON_CONTAINS
标签值进行过滤,即:添加WHERE JSON_CONTAINS(tagList, '"Agronomy"', '$.value')
以便我只返回实验 1(b/c 这是唯一一个带有 tagList 的实验,其中包含一个带有 value =“Agronomy”的对象。
但是,当我将 WHEN 语句添加到查询的末尾时,如下所示:
SELECT e.id as experiment,
JSON_ARRAYAGG(
JSON_OBJECT(
'id', c.id,
'type', c.type,
'value', c.value,
'taggable', 'experiments'
)
) as tagList
FROM Experiments e
LEFT JOIN Taggings d ON e.id = d.taggableId AND d.taggable = 'experiments' AND d.deletedAt IS NULL
LEFT JOIN Tags c ON d.tagId = c.id
GROUP BY e.id
WHERE JSON_CONTAINS(tagList, '"Agronomy"', '$.value');
我得到错误 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE JSON_CONTAINS(tagList, '"Agronomy"', '$.value')' at line 14
。我不确定我在这里做错了什么,我想也许在与 JSON_CONTAINS 相同的查询中运行 JSON AGG 会产生问题?任何帮助,将不胜感激!
解决方案
测试源数据,而不是最终结果。
SELECT e.id as experiment,
JSON_ARRAYAGG( JSON_OBJECT( 'id', c.id,
'type', c.type,
'value', c.value,
'taggable', 'experiments' )) as tagList
FROM Experiments e
LEFT JOIN Taggings d ON e.id = d.taggableId AND d.taggable = 'experiments' AND d.deletedAt IS NULL
LEFT JOIN Tags c ON d.tagId = c.id
GROUP BY e.id
HAVING SUM(c.value = 'Agronomy')
推荐阅读
- excel - 将多个工作簿中的数据合并到一个工作表中
- excel - 如何在特定文本之后和数字之前删除,然后使用 VBA 删除重复项?
- c++ - CString 回文测试
- xamarin - 使用 rg.plugin.popup 的按钮命令未找到绑定的 ViewModel
- html - 使用 CSS 访问网页的背景
- react-native - 更新到 React Native 0.61.3 后排毒选择器失败
- conditional-statements - 是否有等效于 c# 的 .All 的 javascript?
- react-native - 如何修复自定义反应导航组件中的“navigation.state 未定义”?
- jquery - 只调用一次 'require("jquery")'
- python-3.x - 按数据框分组并查找组