设想一个简单的有两列的表,它有thing_id和ategory_id.是的,它被用作事物和类别之间的多对多连接器,但这并不重要,唯一相关的是我们有这个表ThingCategory,其中有这两列.

我想从ThingCategory中进行 Select ,在给定类别列表的情况下--例如(1,2,6,23)--返回属于这些类别-(1,2,6,23)--或更多类别的所有(不同的)Thing_ID.

我没有找到任何解决这一问题的方法,也没有努力研究如何通过在线和此处搜索,以及与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,ategory_id)没有重复

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

Sql相关问答推荐

如何并行SELECT和RESET?

在多个联合中使用相同的SELECT SQL查询

LEFT JOIN不显示计数0我期望的方式

如何根据计数和分组获取订单总数

在SQL查询中使用COALESS

过go 四周未填充的数据,即W50,51,52-SQL

Redshift PL/pgSQL循环中的参数化列名

优化Postgres搜索未知长度的子串

如何在 SNOSQL 中执行反连接(或 where 子句过滤)以查找字段不包含另一个表中的值的行?

获取主表条目,其中最新的辅助条目是 6 个月前

计算不同模式的时间跨度

除了风格之外,还有什么理由更喜欢简单的CASE WHEN而不是搜索呢?

创建具有多个子查询的 SQL 视图

在Snowflake中如何使用SQL对版本字符串进行排序?

如何通过CROSS APPLY获取多级嵌套JSON属性的值?

获取 SQL Server 中每一行的两个-之间的文本

我现在如何显示重复的汽车? postgresql

面对来自以下两个代码的不同输出

PostgreSQL 中的递归树查询

每组跨行曲折?