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


看標題可能看的不明白。舉例子來說

A表是班級表,字段:ID=班級編號,Name=班級名字

B表是學生表,字段:ID=班級編號,SID= 學生編號。

 

就是查詢班級表的全部信息,然后也要查詢出來班級表對應的學生數量。在群里問問,總結有兩個比較簡單,清晰的方法

第一個方法(城主):

select a.*, (select count(*) from b where b.ID=a.id) as 學生數量  from  a

這個看着比較清楚簡單,

 

第二個方法(淚吻星痕):

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM