如何在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
相关产品推荐
相关产品推荐

