【问题标题】:Oracle SQL -- Getting List of Vendors That Do Not Sell Specific ItemsOracle SQL——获取不销售特定商品的供应商列表
【发布时间】:2011-12-14 21:11:49
【问题描述】:

我有一个令我困惑的家庭作业问题。

列出不符合要求的每个供应商标识号和供应商名称 提供“功率范围”和“电动螺丝刀”。


所以,我们有一个 vendor、vendorcatalog 和 inventorydes 表。

供应商

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

供应商目录

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

两者都是主键。

库存

itemno(主键) 物品描述


当前查询

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 家供应商是提供功率范围和电动螺丝刀的供应商。

【问题讨论】:

    标签: sql oracle


    【解决方案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')
    )
    

    【讨论】:

    • 我为相似之处道歉,但它们是不同的,老实说哈哈。 IN 在我的第二次选择中没有被否定,并且我通过命名确保在每个选择中引用相同的供应商。
    【解决方案2】:
    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')
      )
    

    【讨论】:

      猜你喜欢
      • 2011-05-06
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      • 2017-06-12
      • 2022-07-26
      相关资源
      最近更新 更多