You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单条查询获取以keyword为键、filter_code列表为值的Map<String, List<String>>

实现方案

核心思路是通过分组聚合函数将同一keyword对应的filter_code聚合为集合,结合传入的id、keyword参数过滤数据,不同数据库的语法略有差异:

以下示例中:input_id、:input_keyword为传入参数占位符,可根据你使用的框架替换为对应格式,比如MyBatis中替换为#{inputId}、#{inputKeyword}。

MySQL 版本

SELECT 
  keyword,
  GROUP_CONCAT(CAST(filter_code AS CHAR)) AS filter_code_list
FROM filters
WHERE id = :input_id AND keyword = :input_keyword
GROUP BY keyword;

查询返回的filter_code_list为逗号拼接的字符串,你在代码层按逗号拆分即可得到List<String>,再将keyword作为键、列表作为值组装为目标Map格式即可。如果需要自定义分隔符,可修改为GROUP_CONCAT(CAST(filter_code AS CHAR) SEPARATOR '自定义分隔符')。

PostgreSQL 版本

PostgreSQL原生支持数组类型返回,更贴合需求:

SELECT 
  keyword,
  ARRAY_AGG(CAST(filter_code AS VARCHAR)) AS filter_code_list
FROM filters
WHERE id = :input_id AND keyword = :input_keyword
GROUP BY keyword;

返回的filter_code_list本身就是字符串数组,直接和keyword配对即可组装为目标Map。

Oracle 版本

SELECT 
  keyword,
  LISTAGG(TO_CHAR(filter_code), ',') WITHIN GROUP (ORDER BY id) AS filter_code_list
FROM filters
WHERE id = :input_id AND keyword = :input_keyword
GROUP BY keyword;

和MySQL逻辑一致,返回拼接字符串后代码层拆分得到列表即可。

如果你使用MyBatis框架,可以自定义ResultHandler直接自动组装为目标Map<String, List<String>>格式,无需手动解析结果。

内容的提问来源于stack exchange,提问作者PaladinFrom335

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:15:01