sql - 多对多表查询

标签 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

这是我想要的一些示例查询。

  1. 哪些 eid 找到了 B 而不是 A? (回答开斋节 2 和 5)
  2. 哪些 eid 有 fid C 而不是 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

那行不通,因为它仍然会返回 eid=1 和 fid=C 的行。

我清楚自己想要什么吗?

最佳答案

使用set subtraction

Select eid from t where fid = 'B' 
EXCEPT
select eid from t where fid = 'A'

关于sql - 多对多表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/129248/

相关文章:

sql - 如何在交叉表中获取多列

mysql - 除默认值外的分组依据和联系人行

c# - 如何将子查询转换为 Join 以获得快速结果?

sql - 使用 += 连接字符串

sql - left outer join和PIVOT之间有没有一般的关系?

mysql JOIN 当一张表没有条目时

vb.net - 在 VB.NET 中使用 LINQ 组联接

mysql - 多表 JOIN 问题

python - Pandas 数据帧 : How to merge dataframe with multiple index and single index

mysql - 调整两个查询