需要从 MySql table 中过滤掉条件值

Need to filter out conditional values from MySql table

我遇到了这种情况,我需要根据这种逻辑提取 ID。

在此示例中,我想在输出中提取以下组合:

  1. 来源有一个或多个组合 - Raja、Ravi 或 Sam

  1. 来源有一个或多个组合 - Jane、Jake 或 Jude。
ID Source
1 Raja
1 Ravi
2 Sam
2 Raja
3 Jake
3 Raja
3 Sam
3 Jane
4 Sam
4 Jake
4 Jude

输出,我期望为:

ID
1
2

此来源 table 的每个 ID 总是有 1 个以上的来源值。

提前致谢。

使用聚合并在HAVING子句中设置条件:

SELECT ID
FROM tablename
GROUP BY ID
HAVING SUM(Source IN ('Raja', 'Ravi', 'Sam')) > 0
   AND SUM(Source IN ('Jane', 'Jake', 'Jude')) = 0;

参见demo

一个使用 EXISTS 和 NOT EXISTS 的好例子。

这里有一个方法可以做到这一点

select distinct t.id
  from table t
where exists (select 1
                from table t2
               where t2.id=t.id
                 and t2.name in ('Raja','Ravi','Sam')
 and not exists(select 1
                  from table t3
                 where t3.id=t.id
                   and t3.name in ('Jane','Jake','Jude')
                )