2012-08-06 51 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