仅查找属于所有类别的条目

3zwjbxry  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(419)

这个问题在这里已经有答案了

检查一列是否包含另一列的所有值-mysql(5个答案)
11个月前关门了。
在postgresql中,我有3个表:
物品目录
分类表
将文章Map到类别的表
我希望能够找到属于所有类别的文章,而不必知道存在哪些类别。
一个具体的例子:

articles      categories        
| id    |     | id    | name  | 
+-------+     +-------+ ------+ 
| 1     |     | 1     | cat 1 | 
| 2     |     | 2     | cat 2 | 
| 3     |     | 3     | cat 3 | 

category map       
| article_id | category_id  |
+------------+--------------+
| 1          | 1            |
| 1          | 2            |
| 1          | 3            |
| 2          | 1            |
| 2          | 2            |

在这种情况下,符合条件的文章只是文章1。第2条不匹配,因为它只属于第1类和第2类。第3条不匹配,因为它不属于任何类别。
如果我在分类列表中添加另一个分类,则没有文章匹配。因此,查询将取决于categories表中的类别列表。
我不知道如何用一般的方法来处理它。
我曾考虑过使用交叉联接,但categories表的一般性质给我带来了麻烦。

gupuwyp2

gupuwyp21#

您可以使用下面的查询。

SELECT ARTICLE_ID FROM CATEGORY_MAP
WHERE CATEGORY_ID IN (SELECT ID FROM CATEGORIES)
GROUP BY ARTICLE_ID
HAVING COUNT(DISTINCT CATEGORY_ID) = (SELECT COUNT(*) FROM CATEGORIES);

正如您所提到的,这将从 categories 登记入住 Category_map 是否全部可用,然后它将只给出 article_id 所有类别。
在此处查看演示

相关问题