Oracle SQL - 获取不销售特定项目的供应商列表

时间:2011-12-14 21:11:49

标签: sql oracle

我对我的作业提出了一个让我困惑的问题。

  

列出没有的每个供应商标识号和供应商名称   供应'功率范围'和'动力螺丝刀'。


因此,我们有供应商,供应商目录和库存表。

供应商

vid(供应商ID - 主键) 供应商名称 地址

Vendorcatalog

vid(供应商ID) itemno(项目编号)

两者都是主键。

Inventorydes

itemno(主键) itemdescription


当前查询

SELECT vid, vendorname 
    FROM  (SELECT vendor.vid, vendor.vendorname 
               FROM inventorydes, vendor, vendorcatalog 
               WHERE inventorydes.itemno = vendorcatalog.itemno 
                   AND vendorcatalog.vid = vendor.vid 
                   AND inventorydes.itemdescription NOT IN ('power range', 'power screw driver'))

这显示了所有不提供该项目的供应商,但随后它列出了每个供应商销售的每个项目。我只需要一个包含供应商名称的供应商ID列表,而不是供应商ID以及每个正在销售的商品的供应商名称。

所以,我需要的是一个SQL查询(在Oracle数据库上运行),它将获得不提供功率范围和电源螺丝刀的每个供应商ID。

结束输出应为:

v1 |这个供应商的名字
v2 |这个供应商的名字
v3 |这个供应商的名字

只有4家供应商,第4家供应商是提供功率范围和动力螺丝刀的供应商。

2 个答案:

答案 0 :(得分:1)

未经测试但这应该有效:

SELECT V.vid, V.vendorname
FROM Vendor V
WHERE NOT EXISTS ( 
SELECT 1
FROM vendorcatalog VC, inventorydes I
WHERE V.vid=VC.vid AND I.itemno=VC.itemno 
AND I.itemdescription IN ('power range', 'power screw driver')
)

答案 1 :(得分:0)

SELECT 
vid, 
vendorname 
FROM 
vendor
WHERE 
 NOT EXISTS
 (
  SELECT 1 
  FROM 
   inventorydes, 
   vendorcatalog 
  WHERE 
   inventorydes.itemno = vendorcatalog.itemno AND 
   vendorcatalog.vid = vendor.vid AND 
   inventorydes.itemdescription IN ('power range', 'power screw driver')
  )