添加LEFT JOIN会添加结果或修改结果

时间:2016-03-07 21:03:52

标签: sql left-join aggregate-functions

我的表格设计如下:cours> modules> sections>部分我的意思是有课程,课程内有模块,内部模块有部分......

这是我的实际查询:

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;

我希望在添加的读取列中得到相同的结果,但事实并非如此,为什么?

1 个答案:

答案 0 :(得分:1)

这是你要从reads表中使用哪一行的问题。 通常情况下,聚合函数或某些嵌套子查询就是这种情况。

例如,如果您想从time表中获取最大reads,则需要添加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;
相关问题