MySQL加入问题

时间:2011-02-08 22:45:30

标签: mysql join associations

我正在努力实现数据库表'产品'和表'公司'

之间的多对多关系

公司有其独特的ID,产品也有唯一的ID作为主键。

并且假设表'Sells'有company_id,product_id有列。 由于它将成为多对多关系,因此该表不会有主键,对吧?

如果我想获得属于单个公司的产品,Mysql查询会是什么样的? 可以在一个查询中完成吗?

3 个答案:

答案 0 :(得分:1)

就个人而言,我会在Sells表中创建复合(company_id,product_id)的主键。

对于查询本身,如果您只想要返回产品信息:

select p.*
    from Sells s
        inner join products p
            on s.product_id = p.product_id
    where s.company_id = 123

如果您想要返回公司和产品信息:

select c.*, p.*
    from Company c
        inner join Sells s
            on c.company_id = s.company_id
        inner join products p
            on s.product_id = p.product_id
    where c.company_id = 123

答案 1 :(得分:1)

您可以拥有一个由多个列组成的主键,因此对于您的联合表,您可以将主键设为(company_id, product_id)

答案 2 :(得分:0)

  

因为它将成为多对多   关系,不会有   这个表的主键,对吧?

存在多对多关系这一事实并不妨碍您添加主键。您可以使用自动ID(Sale_Id)生成一个。您不应该依赖product_id + company_id,因为给定的公司可以多次销售同一产品。

  

如果我,Mysql查询会是什么样的   想要获得属于的产品   到一家公司?可以这样做   在一个查询中?

SELECT S.PRODUCT_ID FROM SALES S INNER JOIN COMPANY C ON (C.ID = S.COMPANY_ID) WHERE C.ID = XXX