我在MySQL中遇到问题,我在条件中使用COUNT函数。但是,将此与联接组合时,虽然我使用分组,但COUNT值包括所有行,甚至是过滤掉的行。 我提供了一个最小的工作示例,但这可能没有实际意义,也没有巧妙设计。 假设我有3个表:
所以基本上我有产品和团队的ID和名称。产品可以是活跃的(假设这意味着它们仍在生产中)。 然后我有一个关系,哪个团队正在研究哪个产品。 为了解释我的问题,假设表中包含以下最小数量的数据来澄清问题:
现在我要做的查询是用简单的英语:"我希望所有正在处理2个产品的团队,而至少有一个产品必须是活跃的。" 查询一般有效,在mysql中如下:
<EditText
android:textSize="20dp"
android:onClick="makeTextViewFocusedBigger"/>
<EditText
android:textSize="20dp"
android:onClick="makeTextViewFocusedBigger"/>
现在问题在于团队1.因为它正在处理2个活动产品,COUNT(r_count.productId)将是4而不是2.所以我的查询将过滤掉它。
这是没有HAVING子句的结果的屏幕截图:
我明白为什么会发生这种情况,因为rel_production上的两个内连接将导致生成4行。但随后他们将使用GROUP BY合并为一个。所以我需要的是GROUP之后的COUNT而不是之前的COUNT。
我该如何解决这个问题?
答案 0 :(得分:2)
在单独的子查询中对团队执行过滤,然后加入到:
SELECT
t1.teamId,
t1.name
FROM teams t1
INNER JOIN
(
SELECT t1.teamId
FROM rel_production t1
INNER JOIN products t2
ON t1.productId = t2.productId
GROUP BY t1.teamId
HAVING COUNT(DISTINCT t1.productId) = 2 AND SUM(t2.active) > 0
) t2
ON t1.teamId = t2.teamId;