我认为我有一个琐碎的问题,但我不知道这是如何工作的。我有以下具有简单的多对多关系的“公司和产品”表。
我将如何扩展此查询,以使结果仅包含假设所有产品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/