一對多的兩個表,查詢主表的信息和主表在子表中的記錄條數

看標題可能看的不明白。舉例子來講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
相關文章
相關標籤/搜索