2017-08-09 25 views
0

如何將以下內容寫入連接並獲取相同數量的行?此子查詢是否可以寫入連接並仍然獲得相同的結果集/行數?

SELECT 
    s.subjectid, 
    s.subjectname, 
    (SELECT 
    COUNT(*) 
    FROM dbo.Classes AS c 
    WHERE c.SubjectID = s.SubjectID 
    AND c.MondaySchedule = 1) 
    AS numofclasses 
FROM dbo.subjects AS s 
ORDER BY numofclasses DESC 

我試圖把它寫像下面,但得到了不同的答案:

SELECT 
    s.subjectid, 
    COUNT(ClassID) AS numberofclasses 
FROM dbo.subjects AS s 
LEFT JOIN dbo.classes AS c 
    ON s.SubjectID = c.SubjectID 
WHERE c.MondaySchedule = 1 
GROUP BY s.Subjectid 
ORDER BY numberofclasses DESC 
+1

我試圖把它寫像下面,但得到了不同的答案: –

+0

選擇s.subjectid,計數(的ClassID)從dbo.subjects numberofclasses 爲S 留在s.SubjectID =加入dbo.classes爲c c.SubjectID 其中c.MondaySchedule = 1 group by s.Subjectid order by numberofclasses desc –

+0

首先找出您正在使用哪個RDBMS – Strawberry

回答

1

移動where條件的on條件。據轉換外部聯接於內連接:

select s.subjectid, count(ClassID) as numberofclasses 
from dbo.subjects s left join 
    dbo.classes c 
    on s.SubjectID = c.SubjectID and c.MondaySchedule = 1 
group by s.Subjectid 
order by numberofclasses desc ; 

這並假定subjects(subjectid)是唯一的(或主鍵)。否則,這兩者可能會返回不同的結果。

+0

哇,它確實有幫助。我正在獲取更多的SQL專業知識,並因此感到好奇 - 如何將條件解決條件解決呢?它背後的概念/理論是什麼? –

+0

@NikhilaBakurupanda。 。 。 'where'條件過濾掉'c.MondaySchedule = 1'的行。這些是由「左連接」專門創建的行。結果與內部連接相同。 –

相關問題