看標題可能看的不明白。舉例子來講sql
A表是班級表,字段:ID=班級編號,Name=班級名字性能
B表是學生表,字段:ID=班級編號,SID= 學生編號。測試
就是查詢班級表的所有信息,而後也要查詢出來班級表對應的學生數量。在羣裏問問,總結有兩個比較簡單,清晰的方法code
第一個方法(城主):class
select a.*, (select count(*) from b where b.ID=a.id) as 學生數量 from a
這個看着比較清楚簡單,select
第二個方法(淚吻星痕):方法
select a.*, xx.人數 from a, (select b.ID, count(ID) as 人數 from b group by b.ID) xx where a.ID = xx.ID
這個方法用到一個臨時表,至關因而先構造一個臨時表,而後用班 級表A和臨時表作關聯總結
淚吻星痕推薦使用第二個方法,理由是關聯查詢快,他也作過測試。我目前忙項目,本身尚未測試比較兩個性能項目
可是其實兩個sql查詢的結果是不同的查詢
使用第一個方法,
查詢出來班級信息和班級對應的學生數量。即便學生數量是0也是有班級信息的記錄
第二個方法確若是學生數量爲0的話,就不會顯示對應的班級信息。
不過這個是小問題只要修改join關係就能夠
select a.*,xx.人數 from a left join (select b.ID,count(ID) as 人數 from b group by b.ID) xx on a.ID = xx.ID