相关架构:
courier(courid:int,courname:str)
city(cid:int,cname:str,zid:int) #zid belonging to some table named zone
courierservice(courid:int,cid:int)
因此,显而易见的关系是快递“服务”城市。我一直在努力让所有快递员都服务于“两个”城市,cname 为 A 和 B。即可能的交叉点。
我可以使用以下方法获得解决方法:
select courname from courier where courid in (select courid from courierservice
where cid=(select cid from city where cname='A')) and
courid in (select courid from courierservice where cid=(select cid from city where cname='B'));
但这看起来有点重。
根据文档,它应该使用以下 All 子查询:
select * from courier where courid in (select courid from courierservice
where cid = all (select cid from city where cname='A' or cname='B'));
但它返回一个空集。
有什么遗漏吗?