选择给定类别列表(或更多类别)中的所有事物

问题描述 投票:0回答:2

想象一个简单的两列表,它有 thing_id 和 category_id。是的,它被用作 Things 和 Categories 之间的多对多连接器,但没关系,所有相关的是我们有这个表 ThingCategory 和这两列。

我会从 ThingCategory 中选择,在某种程度上,给定类别列表 - 例如(1、2、6、23) - 我返回这些类别中的所有(不同)thing_ids - (1、2、 6, 23) - 或更多类别。

解决这个问题的任何方法都让我望而却步,努力通过在线和此处搜索以及与 ChatGPT 的交互来研究方法 ;-).

我可以想象为一个固定的集合手动构造一个查询。在子查询的级联列表中可能有点像这样:

SELECT thing_id
FROM ThingCategory
WHERE category_id = 23
(SELECT thing_id
FROM ThingCategory
WHERE category_id = 6
(SELECT thing_id
FROM ThingCategory
WHERE category_id = 2
AND thing_id IN
(SELECT thing_id
FROM ThingCategory
WHERE category_id = 1)))

但是有没有更简洁的方法来编写可以在列表 (1, 2, 6, 23) 上工作的查询?

sql select relational-division
2个回答
1
投票

如果您确定没有重复的 (thing_id,category_id)

select thing_id
from thingcategory
where category_id in (1, 2, 6, 23)
group by thing_id
having count(*) = 4;

0
投票

我认为你可以做这样的事情

SELECT DISTINCT thing_id from 
(
SELECT * FROM ThingCategory
WHERE category_id IN (1, 2, 6, 23)
) 
© www.soinside.com 2019 - 2024. All rights reserved.