2016-03-07 228 views
0

我的表是設計這樣的:賽道>模塊>部分>部分我的意思是有課程,裏面的課程有模塊,內部模塊有部分...添加LEFT JOIN添加結果或修改它們

這是我的實際查詢:

SELECT PG.idpage,PG.type 
       FROM pages PG 
       JOIN parts P   ON P.idpart=PG.idpart 
       JOIN sections S   ON S.idsection=P.idsection 
       JOIN modules M   ON M.idmodule=S.idmodule 
       JOIN coursuser CU  ON CU.idcours=M.idcours  
       WHERE PG.idpart='15' AND CU.iduser='1' 
       ORDER BY idpage; 

我試圖:

SELECT PG.idpage,PG.type,R.time 
       FROM pages PG 
       JOIN parts P   ON P.idpart=PG.idpart 
       JOIN sections S   ON S.idsection=P.idsection 
       JOIN modules M   ON M.idmodule=S.idmodule 
       JOIN coursuser CU  ON CU.idcours=M.idcours  
       LEFT JOIN reads R ON R.idpage=PG.idpage 
       WHERE PG.idpart='15' AND CU.iduser='1' 
       ORDER BY idpage; 

我期待着同讀的只是添加的列相同的結果,但這種情況並非如此,爲什麼呢?

+2

因爲每個'PG.idpage'在'reads'表中有多行? –

+0

您沒有從讀取表中選擇任何列。 –

+0

對不起,我編輯了,我選擇R.時間 – Entretoize

回答

1

這是你想從reads表中使用的第一行的問題。 通常,聚合函數或嵌套子查詢就是這種情況。

例如,如果你想拍攝最大timereads表你就需要添加一個GROUP BY條款和應用聚合函數從獲取最大價值MAX(R.time)讀表。

SELECT PG.idpage, PG.type, MAX(R.time) as time 
       FROM pages PG 
       JOIN parts P   ON P.idpart=PG.idpart 
       JOIN sections S   ON S.idsection=P.idsection 
       JOIN modules M   ON M.idmodule=S.idmodule 
       JOIN coursuser CU  ON CU.idcours=M.idcours  
       LEFT JOIN reads R ON R.idpage=PG.idpage 
       WHERE PG.idpart='15' AND CU.iduser='1' 
       GROUP BY PG.idpage, PG.type 
       ORDER BY idpage; 
+0

是的,就是這樣。謝謝 ! – Entretoize