多对多的表查询

Pyr*_*cal 2 sql join

我有一个多对多的索引表,我想对它进行包含/排除类型查询.

fid实际上是一个整数索引,但这里作为字母以便于理解.这是一个示例表:

表t

eid | fid
----+----
1   | A
1   | B
1   | C
2   | B
2   | C
3   | A
3   | C
4   | A
4   | B
5   | B
Run Code Online (Sandbox Code Playgroud)

以下是我想要的一些示例查询.

  1. 什么eid有fid B,而不是A?(回答eid 2和5)
  2. 什么eid有fid,而不是A?(答案2)

我似乎无法找出一个会执行此操作的查询.

我试过像这样的自我加入:

select * 
from t as t1 
join t as t2 
where t1.eid=t2.eid 
  and t1.fid!=t2.fid 
  and t1.fid=B and t2.fid!=A
Run Code Online (Sandbox Code Playgroud)

这将无效,因为它仍会返回eid = 1和fid = C的行.

我清楚自己想要什么吗?

Tom*_*ter 7

使用set减法

Select eid from t where fid = 'B' 
EXCEPT
select eid from t where fid = 'A'
Run Code Online (Sandbox Code Playgroud)