查询结果子集,子查询语法?

时间:2012-08-06 13:17:37

标签: mysql subquery

我正在寻找有关查询的帮助,我似乎无法解决错误。

我有两个表,一个实例和一个操作组。每个操作组都包含实例,所以我有:

Groups.(ID, Verified (Y/N))
Instances.(ID, source (A/B/C/D), status (X/Y/Z, groupid)

我需要做的第一件事是仅隔离包含source=A实例的组,然后我需要使用source != Astatus = Z计算总实例。

问题是,我无法确定在不产生错误的情况下放置子查询的位置。我尝试将其作为FROM中的别名子表,但似乎无法正常工作

以下是我提出的基本查询无效:

SELECT COUNT(Instances.id)
FROM (
    SELECT Instances.id
    JOIN Groups ON Instances.groupid=Groups.id
    WHERE Groups.Verified='Y' AND Instances.source='A') AS a
WHERE Groups.Verified='Y' AND Instances.source!='A' AND Instances.status='Z';

非常感谢任何建议,谢谢!我对SQL很陌生,并且没有接受过正式的培训,但是现在我需要经常使用它。

1 个答案:

答案 0 :(得分:0)

此查询为您提供至少包含一个source = 'A'个实例的所有组的ID:

SELECT DISTINCT(groupid) FROM Instances WHERE source = 'A'

从此开始构建,您需要再次查询Instances,仅考虑属于上述某个组的记录

WHERE groupid IN (SELECT DISTINCT(groupid) FROM Instances WHERE source = 'A')
      AND source != 'A' AND status = 'Z'

您还需要GROUP BY groupid,以便此查询将分别为每个组分配匹配实例的计数。所以最后的查询变成了

SELECT groupid, COUNT(*) AS instance_count FROM Instances
WHERE groupid IN (SELECT DISTINCT(groupid) FROM Instances WHERE source = 'A')
      AND source != 'A' AND status = 'Z'
GROUP BY groupid