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

如何在MySQL中查询array<string>类型列含重复值的行

解决MySQL中找出数组列内部存在重复值的行

针对你的需求,假设pay_type列存储的是JSON数组(MySQL中通常用JSON类型实现array<string>),可以通过以下方法找出内部存在重复值的行:

方法:利用JSON_TABLE展开数组并统计

通过JSON_TABLE将数组拆分为多行,对比每个customer_id对应的元素总数与去重后的元素数量,判断是否存在重复:

SELECT f.*
FROM Finance f
INNER JOIN (
    SELECT customer_id
    FROM Finance
    JOIN JSON_TABLE(
        pay_type,
        '$[*]' COLUMNS(pay_value VARCHAR(255) PATH '$')
    ) AS split_pay
    GROUP BY customer_id
    HAVING COUNT(pay_value) > COUNT(DISTINCT pay_value)
) AS duplicate_rows ON f.customer_id = duplicate_rows.customer_id;

逻辑说明

  1. JSON_TABLE拆分数组:将pay_type中的每个数组元素拆分为单独的行,生成包含customer_id和单个支付类型的临时结果集。
  2. 分组统计对比:按customer_id分组后,统计该用户的支付类型总数量,以及去重后的数量。如果总数量大于去重后的数量,说明该用户的pay_type数组存在重复值。
  3. 关联原表获取完整数据:将存在重复的customer_id与原表关联,返回对应的完整行数据。

注意事项

  • 该方法要求MySQL版本为8.0.4及以上,因为JSON_TABLE是从这个版本开始支持的。
  • 如果你的pay_type是用逗号分隔的字符串(而非JSON数组),可以通过递归CTE拆分字符串后执行类似的统计逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:14:56