恐怕我在标题中提出的问题是错误的...
我在数据库中有两个与此问题有关的表
产品
类别
我需要创建两个查询。
一个获得具有product_category = 1
和product_category = 2
和product_category = 3
[...]的产品ID的人。
第二个是获得products id
或product_category = 1
或product_category = 2
[...]
product_category = 3
我已经尝试了所学到的所有内容,但没有任何效果 我应该使用哪种查询?
编辑:
以下是一些示例行和预期结果
产品
ID | Name
------------
1 | Prod_3
------------
2 | Prod_4
------------
3 | Prod_5
------------
4 | Prod_6
类别
ID | ProductID | CategoryID
----------------------------
1 | 1 | 101
----------------------------
2 | 1 | 102
----------------------------
3 | 1 | 103
----------------------------
4 | 2 | 102
----------------------------
5 | 2 | 103
----------------------------
6 | 2 | 108
----------------------------
7 | 3 | 121
----------------------------
8 | 3 | 111
我要从Name
表中选择Products
。该产品应在Categories
表中,并具有特定的CategoryID
示例1:
Select `ID`, `Name` From `Products`
WHERE IN `Categories`.`ProductID` = `Products`.`ID`
AND (`Categories`.`CategoryID` = 103 AND `Categories`.`CategoryID` = 102)
这应该导致:
ID | Name
------------
1 | Prod_3
------------
2 | Prod_4
示例2:
Select `ID`, `Name` From `Products`
WHERE IN `Categories`.`ProductID` = `Products`.`ID`
AND (`Categories`.`CategoryID` = 108 OR `Categories`.`CategoryID` = 121)
这应该导致:
ID | Name
------------
2 | Prod_4
------------
3 | Prod_5
答案 0 :(得分:0)
听起来像您需要这样的东西:
select distinct p.ID, p.Name
from Products P
inner join Categories C on c.ProductId = p.ID
where c.CategoryID in (108, 121)
答案 1 :(得分:0)
您可以使用group by
和having
来获得具有 all 类别的产品:
select p.ID, p.Name
from products p join
categories c
on c.productid = p.id
where c.categoryid in (102, 103)
group by p.id, p.name
having count(*) = 2; -- number of items in the `in` list
答案 2 :(得分:0)
我最终得到:
SELECT a.product_id FROM `product_categories` a
INNER JOIN (SELECT * FROM product_categories WHERE category_id = 1655) a1 ON
a1.product_id = a.product_id
INNER JOIN (SELECT * FROM product_categories WHERE category_id = 1605) a2 ON
[...]
a2.product_id = a.product_id
WHERE a.category_id = 1575