选择产品ALL来自同一供应商地区

时间:2013-12-22 22:42:22

标签: sql-server

所以我想显示他们的供应商来自同一地区的产品的产品代码。您可以帮我解决这个问题吗? 表就像那样近似

 **supplier**
    ----------------------------------------
    supplier_code|  region   |   
    ----------------------------------------
e1               1         
e2               2
e3               1



 **product**
    ----------------------------------------
    product_code|  price   |   
    ----------------------------------------
    e1               1         
    e2               2
    e3               1

   **supply**(relationship)
    ----------------------------------------
    supplier_code|  product_code   |   
    ----------------------------------------
    e1               e1         
    e2               e2
    e3               e1

到目前为止,我得到了这个,但我不知道如何让一个产品的所有供应商只来自一个地区

SELECT product.product_code

FROM  product,supplier,supply

WHERE product.product_code=supply.product_code 

AND supplier.supplier_code=supply.supplier_code

GROUP BY supplier.region

2 个答案:

答案 0 :(得分:0)

您可以使用此查询。最里面的查询获取每个产品的区域数。然后它选择那些只有一个区域的那些。

select X.product_code from 
(
    select supply.product_code,
    dense_rank() over (partition by product_code order by region) rank
    from supply
    inner join supplier on supply.supplier_code = supplier.supplier_code
) X
GROUP BY X.product_code
HAVING MAX(rank) = 1

答案 1 :(得分:0)

我可能遗漏了一些内容,因为您没有明确要返回的字段,而您的查询仅提供product_code。如果您想知道他们来自的地区需要在SELECT

如果您不需要产品价格,则只需在SupplierSupply表之间加入。

SELECT Supply.product_code, Supplier.region 
FROM  Supplier 
INNER JOIN Supply 
  ON Supplier.supplier_code = Supply.supplier_code
GROUP BY Supply.product_code, Supplier.region

给出结果:

PRODUCT_CODE  REGION
e1            1
e2            2

SQL Fiddle