看標題可能看的不明白。舉例子來說
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
