在實現一個問題的時候,同樣的結果我寫了兩個sql。 sql1 sql2 在效率問題上詢問了前輩,得到的建議是使用第二個,因為分組跟子查詢都會影響效率,相比之下分組好一點。 另外產生的一個問題是,如果使用.net並使用c#語言實現sql的話,第一個sql是無法(在我的能力範圍內)使用拉姆達查詢對象的, ...
在實現一個問題的時候,同樣的結果我寫了兩個sql。
sql1
1 SELECT C1.*, C2.CF_NAMES 2 FROM FAMS_CLASSIFY C1 3 LEFT JOIN (SELECT A.CL_ID, LISTAGG(B.CF_NAME, ',') WITHIN GROUP(ORDER BY B.CF_NAME) AS CF_NAMES 4 FROM FAMS_CLASSIFY A 5 LEFT JOIN FAMS_CUSTOMFIELD B 6 ON A.CL_ID = B.CL_ID 7 GROUP BY A.CL_ID) C2 8 ON C1.CL_ID = C2.CL_ID 9 WHERE C1.CL_TYPE = '2' 10 AND C1.CL_STATUS = '0' 11 AND 1=1 12 ORDER BY C1.CL_PID ASC, C1.CL_ID ASC
sql2
1 SELECT A.CL_ID, 2 A.CL_NAME, 3 A.CL_PID, 4 A.CL_PNAME, 5 LISTAGG(B.CF_NAME, ',') WITHIN GROUP(ORDER BY B.CF_NAME) AS CF_NAMES 6 FROM FAMS_CLASSIFY A 7 LEFT JOIN FAMS_CUSTOMFIELD B 8 ON A.CL_ID = B.CL_ID 9 WHERE A.CL_TYPE = '2' 10 AND A.CL_STATUS = '0' 11 AND 1 = 1 12 GROUP BY A.CL_ID, A.CL_NAME, A.CL_PID, A.CL_PNAME 13 ORDER BY A.CL_PID ASC, A.CL_ID ASC ;
在效率問題上詢問了前輩,得到的建議是使用第二個,因為分組跟子查詢都會影響效率,相比之下分組好一點。
另外產生的一個問題是,如果使用.net並使用c#語言實現sql的話,第一個sql是無法(在我的能力範圍內)使用拉姆達查詢對象的,但是又需要做結果分頁。
以前用的是拉姆達查詢對象的一個toPageList()方法,d進去發現裡面的sql使用的是skip和take來分頁,但是百度上都說oracle是使用rownum來分頁的,沒有其他分頁方法。
最後詢問知道skip和take是 Linq 的語法,轉換成sql可能也是rownum。