2012-08-06 14 views
0

지난 오류가 발생하지 않는 쿼리에 대한 지원을 찾고 있습니다.하위 쿼리 결과의 하위 집합을 쿼리 하시겠습니까?

두 테이블, 인스턴스 중 하나, 운영 그룹 중 하나가 있습니다. 각 운영 그룹은 인스턴스를 포함, 그래서 나는 거라고 :

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

내가해야 할 첫번째 일은 source=A와 인스턴스를 포함하고 내가 source != Astatus = Z으로 전체 인스턴스를 계산해야하는 그룹 만 분리입니다 .

문제는, 오류를 생성하지 않고 하위 쿼리를 어디에 넣을 지 파악할 수 없었습니다. 나는 FROM에 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'에있는 모든 그룹의 식별자 제공 :

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

입니다. 지금 질의를 실행하면 오랜 시간이 걸리는 것으로 보이지만 데이터베이스가 크면 어떻게되는지 알려줍니다. 감사합니다! –

+0

sytax가 올바르게 보이지만 10 분 후에 결과를 얻지는 못합니다. 팀에서 저를 찾아 볼 것입니다. 도움을 주셔서 감사합니다! –