首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从一个表中获取行,它的id在另一个表中有条件(不知道如何命名)

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

Stack Overflow用户
提问于 2018-11-22 21:45:12
回答 3查看 57关注 0票数 0

恐怕我问错题目了.

我在数据库中有两个表,它们与这个问题有关。

产品

  • product_id
  • 名字
  • 等。

类别

  • id
  • product_id
  • category_id

我需要创建两个查询。

一是获得product_category = 1product_category = 2product_category = 3的产品标识.

第二种方法是让products idproduct_category = 1product_category = 2product_category = 3 .

我已经尝试了我学到的所有东西,但是没有任何效果,我应该使用什么样的查询?

编辑:

以下是一些示例行和预期结果

产品

代码语言:javascript
复制
ID | Name 
------------
1  | Prod_3
------------
2  | Prod_4
------------
3  | Prod_5
------------
4  | Prod_6

类别

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

Example1:

代码语言:javascript
复制
Select `ID`, `Name` From `Products`

WHERE IN `Categories`.`ProductID` = `Products`.`ID`

AND (`Categories`.`CategoryID` = 103 AND `Categories`.`CategoryID` = 102)

这应导致:

代码语言:javascript
复制
ID | Name 
------------
1  | Prod_3
------------
2  | Prod_4

Example2:

代码语言:javascript
复制
Select `ID`, `Name` From `Products`

WHERE IN `Categories`.`ProductID` = `Products`.`ID`

AND (`Categories`.`CategoryID` = 108 OR `Categories`.`CategoryID` = 121)

这应导致:

代码语言:javascript
复制
ID | Name 
------------
2  | Prod_4
------------
3  | Prod_5
EN

回答 3

Stack Overflow用户

发布于 2018-11-23 02:28:26

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

代码语言:javascript
复制
select distinct p.ID, p.Name
from Products P 
  inner join Categories C on c.ProductId = p.ID 
where c.CategoryID in (108, 121)
票数 0
EN

Stack Overflow用户

发布于 2018-11-23 02:54:44

您可以使用group byhaving获取所有类别的产品:

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

Stack Overflow用户

发布于 2018-11-24 10:13:49

最后我得到了:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53438307

复制
相关文章

相似问题

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