Sql server 选择所有来自同一供应商区域的产品

Sql server 选择所有来自同一供应商区域的产品,sql-server,Sql Server,所以我想显示他们的供应商都来自同一地区的产品的产品代码。你能帮我查询一下吗? 桌子大概是这样的 **supplier** ---------------------------------------- supplier_code| region | ---------------------------------------- e1 1 e2 2 e3

所以我想显示他们的供应商都来自同一地区的产品的产品代码。你能帮我查询一下吗? 桌子大概是这样的

 **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

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

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

我可能遗漏了一些内容,因为您没有明确说明要返回的字段,并且您的查询只给出了
产品\u代码
。如果您想知道他们来自的地区,需要在
中选择

如果不需要产品的价格,则只需在
供应商
供应
表之间加入

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

询问代码的问题必须表明对所解决问题的最低理解。包括尝试过的解决方案,以及它们不起作用的原因。谢谢guidancec@freshprinceofsow,group by do做什么?不要使用逗号连接语法。请使用显式连接语法。我认为Group by可能是错误的,但我的主要问题是一个产品的所有供应商都必须来自同一地区。我的教授只教我这种语法,到目前为止还没有完成。考虑提供适当的DDL和/或SqLFIDLE连同期望的结果SETSRY -没有发现这是M$SqLWELL完成,我没有意识到这正是他想要的。我认为他理解这个密码的几率很低。希望他能在谷歌上搜索并找出原因。我会尝试将其调整到我更复杂的模式,但这似乎是非常正确的!非常感谢你!