gpt4 book ai didi

mysql - 仅当该集合中的所有项目都满足特定条件时才返回集合 ID

转载 作者:行者123 更新时间:2023-11-28 23:28:25 27 4
gpt4 key购买 nike

我看过similar questions ,但我似乎无法理解答案是如何工作的,以便将它们应用到我的案例中。

我有文章集(set_table)

ID SET   ID ART
1 1
1 4
2 1
2 4
3 2
1 3

这些文章有一个包含其父 ID 的表。 (文章表)

ID ART   ID PARENT
1 1
2 3
3 2
4 1

然后那些 parent 有一个他们必须满足的条件,但它可以是多个(parent_table):

PARENT ID  GROUP ID
1 6
2 15
3 12

意思是,我必须选择所有文章(所有)都在第 6 组中的集合,那么结果应该是 ID SET: 2。或者我可能需要选择所有文章(所有)在第 6 组中的集合第 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

这很酷,但我没有设法正确过滤集合,我尝试选择集合的尝试不起作用。

最佳答案

一旦您开始编写下面的查询,它就不会那么痛苦。只需将三个表连接在一起,然后使用条件聚合来计算 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

关于mysql - 仅当该集合中的所有项目都满足特定条件时才返回集合 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38326330/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com