想象一个简单的两列表,它有 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) 上工作的查询?
如果您确定没有重复的 (thing_id,category_id)
select thing_id
from thingcategory
where category_id in (1, 2, 6, 23)
group by thing_id
having count(*) = 4;
我认为你可以做这样的事情
SELECT DISTINCT thing_id from
(
SELECT * FROM ThingCategory
WHERE category_id IN (1, 2, 6, 23)
)