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

如何在MySQL变量中获取指定条件下的不重复ID列表?

正确实现方案

你之前的SQL错误在于用CONCAT把每行的两个ID拼接成了单个字符串,去重后根本无法提取出独立的不重复ID。要实现需求,需要先把所有符合条件的ID(不管是user_id还是req_user_id)单独提取出来,去重后再拼接成列表。

基础实现(无特定顺序)

SET @list_req = (
    SELECT GROUP_CONCAT(DISTINCT id)
    FROM (
        -- 提取符合条件行的user_id
        SELECT user_id AS id FROM send_request WHERE user_id = 2 OR req_user_id = 2
        -- 合并并自动去重符合条件行的req_user_id
        UNION
        SELECT req_user_id AS id FROM send_request WHERE user_id = 2 OR req_user_id = 2
    ) AS combined_ids
);

指定顺序实现(匹配预期的1,9,7,2)

如果需要严格按照你给出的顺序输出,可以用ORDER BY FIELD()来指定排序规则:

SET @list_req = (
    SELECT GROUP_CONCAT(DISTINCT id ORDER BY FIELD(id, 1, 9, 7, 2))
    FROM (
        SELECT user_id AS id FROM send_request WHERE user_id = 2 OR req_user_id = 2
        UNION
        SELECT req_user_id AS id FROM send_request WHERE user_id = 2 OR req_user_id = 2
    ) AS combined_ids
);

验证逻辑

  • 符合条件的行是ID为1、2、3的记录
  • 子查询会先提取这些行中的所有user_id(1、2、7)和req_user_id(2、9、2)
  • 通过UNION自动去重后得到唯一ID集合:1、2、7、9
  • 经GROUP_CONCAT拼接后得到目标字符串,指定排序后会匹配你预期的顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:42:48