2016-03-01 52 views
0

我有兩個表SQL查詢問題的計數功能上的子查詢

BatchDetails

BatchCode MaxStd 
------------------ 
B001   12 
B002   14 
B003   10 

AdmissionBatch

Batch Rollno 
--------------- 
B001 1 
B001 2 
B002 3 
B003 4 
B003 5 

我需要這些批次的BatchCode都沒有最多的學生。我寫了一個查詢,但它不工作

select 
    batchCode, MaxStd, count(rollno) 
from 
    BatchDetails as a 
join 
    AdmissionBatch as b on a.batchcode = b.batch 
group by 
    batchcode, maxStd 
having 
    count(rollno) < maxSTD 

此查詢不是因爲工作,如果沒有學生在某一批次,則批次將不會出現

我試圖子查詢很好,但沒有幫助

請幫忙

+0

的答案也許是一個解決方案了,但我也有疑惑......究竟什麼是你試圖實現?比方說,'BatchDetails'中沒有BatchCode'B002'的行。預期產出會是多少?什麼,如果MaxStd是零(或'NULL')? – Shnugo

回答

1

使用左連接而不是內連接。

select batchCode,MaxStd, count(rollno) from BatchDetails as a 
LEFT JOIN AdmissionBatch as b on a.batchcode=b.batch 
group by batchcode,maxStd 
having count(rollno)< maxSTD 
1

你需要一個左連接,以保持結果,即使沒有匹配:

select batchCode,MaxStd, count(rollno) 
from BatchDetails as a 
left outer join AdmissionBatch as b 
on a.batchcode=b.batch 
group by batchcode,maxStd 
having count(rollno)< maxSTD