我看过similar questions,但我似乎无法理解答案是如何运作的,以便将它们应用到我的案例中。
我有一些文章(set_table)
ID SET ID ART
1 1
1 4
2 1
2 4
3 2
1 3
这些文章的表格及其父ID。 (article_table)
ID ART ID PARENT
1 1
2 3
3 2
4 1
那些父母有一个他们必须遇到的条件,但它可能是多个(parent_table):
PARENT ID GROUP ID
1 6
2 15
3 12
意思是,我必须选择其文章(所有这些)都在GROUP 6中的所有集合,然后结果应该是ID SET:2。或者我可能需要选择其文章(所有这些)都在的所有集合组6和15,然后结果应该是ID SET:1。或者我可能需要选择其文章(所有这些)都在第6组,第12组中的所有组;那么结果应该是NULL。
我试过了:
SELECT parent_id
FROM parent_table
WHERE group_id IN (6,15)
GROUP BY parent_id
HAVING COUNT(DISTINCT group_id) = 2; -- Number of group ids
哪个很酷,但我无法正确过滤套装,我选择套装的尝试无效。
答案 0 :(得分:1)
一旦开始编写,下面的查询就不那么痛苦了。只需将三个表连接在一起,然后使用条件聚合来计算ID_SET
中具有所需组的条目数。
以下查询查找具有6或12组的ID_SET
值。请注意,这将为您在原始问题中提供的样本数据返回空结果集。需要DISTINCT
子查询来删除重复的组值,否则会丢弃条件聚合。
SELECT t.ID_SET,
SUM(CASE WHEN t.GROUP_ID IN (6, 12) THEN 1 ELSE 0 END) AS groupCount
FROM
(
SELECT DISTINCT s.ID_SET, p.GROUP_ID
FROM set_table s
INNER JOIN article_table a
ON s.ID_ART = a.ID_ART
INNER JOIN parent_table p
ON a.ID_PARENT = p.PARENT_ID
) t
GROUP BY t.ID_SET
HAVING groupCount = 2 -- change 2 to however many group values you want to match
答案 1 :(得分:0)
使用以下查询
select ID ART
from articles a
join Parent1 p1 on a.ID ART = p1.ID ART
join Parent2 p2 on p1.ID PARENT = p2.PARENT ID AND p2.GROUP ID in (6,12)