欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

对oracle sql的一些总结

程序员文章站 2022-08-10 16:43:27
在实现一个问题的时候,同样的结果我写了两个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。