資料庫教學: Left join範例, 用A表的PK作KEY尋找在B表中有各有幾筆資料並顯示在同個view

前言:

用A表的PK作KEY尋找在B表中有各有幾筆資料並顯示在同個view

前陣子學妹建立了一個問答遊戲
讓使用者可以在後台自由新增遊戲與每一個遊戲的題目
問學長我如果想要同時顯示遊戲與此遊戲目前有幾個問題的話
可以有什麼方法呢?

當然可以下兩個SQL, 先使用SELECT再用foreach將兩個結果merge
那這樣有50個遊戲不就會跑1+50次的SQL嗎? 光想就知道效能上的差異

所以我想用JOIN, 一次完成所需要的功能


table結構如下
A表 a_id, a_name
B表 b_id, a_id, b_data

Step1:先做子查詢

SELECT B.a_id, COUNT(B.b_id) count FROM B
GROUP BY a_id

Output:
a_id, count
1    , 10
2    , 20
3    , 30


Step2:將子查詢當作一個表來與原來的A表JOIN


SELECT A.a_id, A.a_name, count
FROM table1 A
LEFT JOIN (
SELECT B.a_id, COUNT(B.b_id) count FROM B
WHERE 1 GROUP BY a_id
) C ON A.a_id = C.a_id

這裡學妹會發現只有count是原本不存在的數值
現在我們先產生一個view
再將它與原本的表格join

這樣我們就可以在同個VIEW看到A表與在B表中的COUNT啦
我歡喜地舉起學妹的手歡呼

留言