所以我想显示他们的供应商来自同一地区的产品的产品代码。您可以帮我解决这个问题吗? 表就像那样近似
**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
答案 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
。
如果您不需要产品价格,则只需在Supplier
和Supply
表之间加入。
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