【发布时间】:2021-09-06 22:12:15
【问题描述】:
问题和预期结果
假设我有下表t:
id f_id col1
---------- ---------- ----------
1 1 B
2 1 C
3 2 A
4 2 C
5 2 D
6 2 E
7 3 A
8 3 D
9 3 E
10 4 A
11 4 B
12 5 C
13 5 D
我想选择所有不同的 f_id 以使 col1 包含以下值组合之一:
- A 和 C
- A 和 D
- A 和 C 和 D
因此,预期的结果是:
f_id
----------
2
3
自己尝试
基于previous question 我尝试了以下查询
SELECT f_id
FROM t
WHERE (col1 IN ('A', 'C')) or (col1 in ('A', 'D'))
GROUP BY f_id
HAVING COUNT(distinct col1) >= 2;
但是,此查询也与包含 C 和 D 但不包含 A 的组匹配。我不想要这个,因为 A 很重要。上面的查询结果如下:
f_id
----------
2
3
5
如何获得想要的结果?
原始脚本
为了方便,这里是生成原表的代码:
drop table if exists t;
CREATE TABLE t (id INTEGER, f_id INTEGER, col1 VARCHAR(1));
INSERT INTO t (id, f_id, col1) VALUES
(1, 1, 'B'),
(2, 1, 'C'),
(3, 2, 'A'),
(4, 2, 'C'),
(5, 2, 'D'),
(6, 2, 'E'),
(7, 3, 'A'),
(8, 3, 'D'),
(9, 3, 'E'),
(10, 4, 'A'),
(11, 4, 'B'),
(12, 5, 'C'),
(13, 5, 'D')
;
【问题讨论】: