如何从存在一对多关系的表中获取数据?

时间:2014-11-07 04:53:29

标签: sql sql-server sql-server-2008

我在ms sql server中创建了三个表,如Product,Brands和ProductBrands 这些表包含以下数据

产品(PId - PName)

  • 1 - 手机
  • 2 - T.V
  • 3 - A.C

品牌(BId - BName)

  • 1 - 三星
  • 2 - 索尼
  • 3 - L.G

ProductsBrands(PBId - PId - BId)

  • 1 - 1 - 1
  • 2 - 1 - 2
  • 3 - 1 - 3
  • 4 - 2 - 1
  • 5 - 2 - 3

...

...

现在我必须从表格中获取以下场地

  • 产品ID
  • PName
  • 出价
  • BNAME

基本上我必须获取分配给产品的所有品牌

请帮帮我!!!我是新手

3 个答案:

答案 0 :(得分:3)

SELECT  P.PId ,
        P.PName,
        B.BId,
        B.BName
FROM    Products P
JOIN    ProductsBrands  PB On PB.PId  = P.PId 
JOIN    Brands  B ON B.BId  = PB.BId 

看,这是否是您正在寻找的。

答案 1 :(得分:2)

如果我的理解是正确的:(获取分配给产品的所有品牌)

select BName from Brands where BId in 
(select distinct Bid from ProductsBrands where PId = (select PId from Products where PName = @input))

答案 2 :(得分:2)

首先你可能不需要" PBid" " ProductBrand"的字段相反,您可以使用复合主键作为主键" PId,BId "。

这是SQL代码。

Select PId, PName, BId, BName
from product p , brand b , productbrands pd
where p.pid = pd.pid and b.bid = pd.bid

请记住,如果您的一个产品属于一个且只有一个品牌,那么您可以将其减少到只有两个表

ex -product(pid,pname,bid)和     品牌(bid,bname)