我的搜索根据以下列出的多个类别进行过滤,以查找属于A-F类别但同一类别中没有多于一项的任何记录。我会尝试用一个例子来解释。
A Bread
B Apple
C Strawberry OR Blueberry OR Raspberry
D Watermelon OR Muskmelon OR Honeydew
E Papaya
F Oranges OR Peaches OR Nectarines
T1:
1
2
3
4
5
6
7
T2:
ID Category
1 Bread
2 Apple
2 Strawberry
3 Blueberry
3 Raspberry
4 Watermelon
5 Muskmelon
5 Honeydew
4 Papaya
2 Oranges
1 Peaches
5 Nectarines
在上述情况下,我的搜索将返回:
1 Bread,Peaches
2 Apple,Strawberry, Oranges
4 Watermelon,Papaya
3和5属于同一类别的商品-
#3: Blueberry and Raspberry
#5: Muskmelon, Honeydew and Nectarines
答案 0 :(得分:0)
首先,您需要一个表-称为CATEGORY_GROUPS ( category, category_group )
-来关联您帖子中的这些信息:
A Bread B Apple C Strawberry OR Blueberry OR Raspberry D Watermelon OR Muskmelon OR Honeydew E Papaya F Oranges OR Peaches OR Nectarines
例如,其中“面包”将是类别,而“ A”将是类别组。
然后,在查询中将t1
,t2
和category_groups
连接在一起,以便获得每个项目,其类别和类别组。然后按id
分组。
关键部分是如何限制重复项。如果存在重复项,那么不同类别组的数量将少于类别数量。因此,您可以在HAVING
子句中使用该条件来获取所需的内容。
就像这样应该起作用:
SELECT t1.id, listagg(t2.category,',') within group ( order by category )
FROM t1 inner join t2 on t2.id = t1.id
inner join category_groups cg on cg.category = t2.category
GROUP BY t1.id
HAVING COUNT(DISTINCT cg.category_group) < COUNT(DISTINCT t2.category)