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

MySQL多字段去重问题:筛选userid/object为1且无重复数据

解决方案

先拆解需求核心逻辑:先筛选userId=1或object=1的记录并去重,再按两个互斥规则过滤:

  • 若存在userId=1且object=2的记录,剔除userId=2且object=1的记录
  • 若存在userId=2且object=1的记录,剔除userId=1且object=1的记录

可以用CTE(公共表表达式)分步实现,SQL语句如下:

WITH deduplicated AS (
    -- 第一步:筛选符合基础条件的记录并去重
    SELECT DISTINCT userId, object 
    FROM userChat 
    WHERE userId = 1 OR object = 1
),
condition_check AS (
    -- 第二步:检查触发排除规则的关键记录是否存在
    SELECT 
        EXISTS(SELECT 1 FROM deduplicated WHERE userId=1 AND object=2) AS has_user1_obj2,
        EXISTS(SELECT 1 FROM deduplicated WHERE userId=2 AND object=1) AS has_user2_obj1
)
-- 第三步:根据检查结果应用排除规则,输出最终数据
SELECT d.userId, d.object
FROM deduplicated d
CROSS JOIN condition_check c
WHERE
    NOT (c.has_user1_obj2 AND d.userId=2 AND d.object=1)
    AND NOT (c.has_user2_obj1 AND d.userId=1 AND d.object=1);

逻辑说明

  1. deduplicated 先提取满足基础条件的去重记录,作为候选数据集
  2. condition_check 提前判断两个关键触发记录是否存在,避免重复查询
  3. 最后通过WHERE条件,根据判断结果精准剔除不符合规则的记录,得到预期的3条不重复数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:06:26