需要从 MySql table 中过滤掉条件值
Need to filter out conditional values from MySql table
我遇到了这种情况,我需要根据这种逻辑提取 ID。
在此示例中,我想在输出中提取以下组合:
- 包含结果如果:
- 来源有一个或多个组合 - Raja、Ravi 或 Sam
和
- 在以下情况下排除 ID:
- 来源有一个或多个组合 - 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')
)
我遇到了这种情况,我需要根据这种逻辑提取 ID。
在此示例中,我想在输出中提取以下组合:
- 包含结果如果:
- 来源有一个或多个组合 - Raja、Ravi 或 Sam
和
- 在以下情况下排除 ID:
- 来源有一个或多个组合 - 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')
)