首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL加入问题

问MySQL加入问题
EN

Stack Overflow用户
提问于 2011-02-09 06:45:30
回答 3查看 37关注 0票数 2

我正在尝试实现db表'Products‘和表'Companies’之间的多对多关系。

公司有其唯一的id,产品也有唯一的id,作为它们的主键。

假设表‘Sell’有company_id和product_id作为列。因为这将是一个多对多的关系,所以这个表不会有主键,对吧?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-09 06:49:32

就我个人而言,我会在销售表中为组合(company_id,product_id)创建一个主键。

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

代码语言:javascript
复制
select p.*
    from Sells s
        inner join products p
            on s.product_id = p.product_id
    where s.company_id = 123

如果您希望返回公司和产品信息:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-02-09 06:50:52

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

票数 1
EN

Stack Overflow用户

发布于 2011-02-09 06:56:16

因为这是一个多对多的关系,所以这个表不会有主键,对吧?

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

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

代码语言:javascript
复制
SELECT S.PRODUCT_ID FROM SALES S INNER JOIN COMPANY C ON (C.ID = S.COMPANY_ID) WHERE C.ID = XXX
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4939391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档