我认为我有一个琐碎的问题,但我不知道这是如何工作的。我有以下具有简单的多对多关系的“公司和产品”表。

我将如何扩展此查询,以使结果仅包含假设所有产品ID为1和2的公司?

我试图在我能想到的任何地方添加地点和拥有物,但我所能得到的是所有所有产品的ID为x的公司(没有附加的and)

公司表

id | name
-----------------
1  | Company 1
2  | Company 2
3  | Company 3


公司_产品表

id | product_id | company_id
----------------------------
1  | 1          | 1
2  | 2          | 1
3  | 3          | 1
4  | 1          | 2
5  | 1          | 3
6  | 2          | 3


产品表

id | name
-----------------
1  | Product A
2  | Product B
3  | Product C


声明

SELECT companies.name,
       companies.id AS company_id,
       products.id  AS product_id
FROM   companies
       LEFT JOIN company_products
              ON companies.id = company_products.company_id
       INNER JOIN products
               ON company_products.product_id = products.id

最佳答案

如果要使所有具有关联产品1和2的公司,可以编写以下查询:

SELECT c.name,
   c.id AS company_id
FROM   companies c
WHERE (SELECT COUNT(*)
    FROM company_products cp
   WHERE cp.company_id = c.id
   AND cp.product_id in ('1', '2')
) = 2


转到Sql Fiddle

如果要在主查询中了解有关关联产品的信息,那么除了现有查询外,还必须使用联接。

关于mysql - 多对多在其他地方加入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27121088/

10-09 01:56