2012-08-06 70 views
0

我正在寻找一种查询的帮助,我似乎无法获得过去的错误。查询结果子集,子查询语法?

我有两个表,实例中的一个,和业务类别中的一个。每个工作组包含的情况下,所以我有:

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

我需要做的第一件事是孤立只包含实例与source=A,然后我需要将总的实例与source != Astatus = Z算组。

的问题是,我一直无法弄清楚在何处放置子查询,而不会产生一个错误。我试图把它作为从alias'd子表,但似乎并没有工作

这里是基本的查询我想出了那个不工作:

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很陌生,没有经过正式培训,但现在我需要定期使用它。

回答

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 
+0

现在运行查询,好像运行了很长时间,但数据库很大,会让你知道它是怎么出来的,谢谢! – 2012-08-06 13:50:03

+0

sytax看起来不错,但是我在10分钟后没有得到结果,所以这是数据库端的事情,团队会为我寻找帮助! – 2012-08-06 13:58:39