Mag*_*hea 4 mysql query select
给定表
序列号 | 序列状态 |
---|---|
1 | A |
1 | 乙 |
2 | A |
2 | A |
3 | A |
4 | 乙 |
5 | C |
我想选择不同的 seq_id,其中 seq_status 为 A(2 和 3),并且如果其中一个值不同则不返回
到目前为止我有一些看起来像这样的东西
SELECT distinct(s.seq_id) FROM sequence s
having s.seq_id IN (
select z.seq_id
from sequence z
group by z.seq_id, z.seq_status
having z.seq_status = "A" )
Run Code Online (Sandbox Code Playgroud)
但这会返回带有 seq_status A 的任何 seq_id,并且我只查找 seq_id,其中 seq_status 全部与所需值匹配
还有另一种选择:
# All non-NULL seq_status values per seq_id contain 'A'
SELECT s.seq_id
FROM sequence AS s
GROUP BY s.seq_id
HAVING SUM(s.seq_status = 'A') = COUNT(*);
Run Code Online (Sandbox Code Playgroud)
这是可行的,因为比较运算的结果为 1 (TRUE)、0 (FALSE) 或 NULL。
有很多替代方案,包括:
HAVING COUNT(DISTINCT seq.status) = 1 AND MIN(seq_status)='A'
HAVING SUM(s.seq_status <> 'A' OR seq.status IS NULL) = 0
Run Code Online (Sandbox Code Playgroud)
更不用说使用EXISTS
or编写的查询了= ALL
。
或者如果你想忽略 NULL:
SELECT s.seq_id
FROM sequence AS s
GROUP BY s.seq_id
HAVING MIN(s.seq_status) = 'A'
AND MAX(s.seq_status) = 'A';
Run Code Online (Sandbox Code Playgroud)