考虑以下架构: 供应商(sid:整数,sname:字符串,地址:字符串) ,Parts(pid:integer,pname:string,color:string) 和目录(sid:整数,pid:整数,成本:实数)
目录关系列出了供应商对零件收取的价格。
找到仅提供红色部件的供应商的sids。
所以我知道我最终需要为供应商选择目录sid,但我不知道如果他们销售的供应商sid的所有实例以及未着色为红色的商品,该如何删除。
会欣赏任何方向。我一直试图做AND的组合,但似乎无法消除所有出售非红色部分的sids。
答案 0 :(得分:1)
仅销售红色部件的供应商:
Select distinct c.Sid
From Catalog c join Parts p
on p.pid = c.pid
Where p.Color = 'RED'
and Not exists
(Select * from Catalog
Where sid = c.Sid
and pid in (Select Pid from Parts
Where Color != 'RED'))
在英语中,它几乎与您在问题中所说的完全相同
“查找仅提供红色部件的供应商的sids。”
其中,将单词only
转换为它的两部分......等同于
“查找提供红色部件且不提供任何非红色部件的供应商的sids。”
所以......
Select distinct c.Sid -- "Find the sids of suppliers ..."
From Catalog c join Parts p
on p.pid = c.pid
Where p.Color = 'RED' -- "who supply red parts ... "
and Not exists -- " and do not supply ..."
(Select * from Catalog -- " Parts ... "
Where sid = c.Sid
and pid in (Select Pid from Parts -- " ... That are ..."
Where Color != 'RED')) -- " ... Not Red"