从一个表中获取行,该行在另一个表中具有条件id(不知道如何命名)

67up9zun  于 2021-06-17  发布在  Mysql
关注(0)|答案(3)|浏览(196)

恐怕我问错题目了。。。
数据库中有两个表,它们与这个问题有关
产品
产品id
名称
等。
类别
身份证件
产品id
类别\u id
我需要创建两个查询。
一个获得产品id product_category = 1 以及 product_category = 2 以及 product_category = 3 [...].
第二个是 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

我要选择 NameProducts table。这个产品应该在 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
slwdgvem

slwdgvem1#

听起来你需要这样的东西:

select distinct p.ID, p.Name
from Products P 
  inner join Categories C on c.ProductId = p.ID 
where c.CategoryID in (108, 121)
t1rydlwq

t1rydlwq2#

我最终得到了:

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
yshpjwxd

yshpjwxd3#

你可以用 group by 以及 having 要获取包含所有类别的产品:

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

相关问题