ibatis的sql语句,大神们来看一下
<selectid="selectOrdersByForPage"parameterClass="java.util.Map"resultClass="Orders">S...
<select id="selectOrdersByForPage" parameterClass="java.util.Map" resultClass="Orders">
SELECT * FROM (
SELECT ic.*,rownum rownum_ FROM (
SELECT
ORDERID,
ORDERCODE,
LINKCODE,
ORDERTYPE,
ORDERSUBTYPE,
BIZTYPE,
GOODFLAG,
IMEITYPE,
STATUS,
FROMORGID,
TOORGID,
UGENTTYPE,
SENDDATE,
ACCEPTDATE,
MEMO
FROM ORDERS WHERE (TOORGID=#orgId# OR FROMORGID=#orgId#)
<isNotEmpty prepend="AND" property="fromOrgId"> FROMORGID=#fromOrgId# </isNotEmpty>
<isNotEmpty prepend="AND" property="toOrgId"> TOORGID=#toOrgId# </isNotEmpty>
<isNotEmpty prepend="AND" property="orderCode"> ORDERCODE LIKE '%'||#orderCode#||'%' </isNotEmpty>
<isNotEmpty prepend="AND" property="linkCode"> LINKCODE LIKE '%'||#linkCode#||'%' </isNotEmpty>
<isNotEmpty prepend="AND" property="orderType"> ORDERTYPE=#orderType# </isNotEmpty>
<isNotEmpty prepend="AND" property="orderSubType"> ORDERSUBTYPE=#orderSubType# </isNotEmpty>
<isNotEmpty prepend="AND" property="bizType"> BIZTYPE=#bizType# </isNotEmpty>
<isNotEmpty prepend="AND" property="goodFlag"> GOODFLAG=#goodFlag# </isNotEmpty>
<isNotEmpty prepend="AND" property="imeiType"> IMEITYPE=#imeiType# </isNotEmpty>
<isNotEmpty prepend="AND" property="status"> STATUS=#status# </isNotEmpty>
<isNotEmpty prepend="AND" property="sendStartDate"><![CDATA[ SENDDATE >= #sendStartDate# ]]> </isNotEmpty>
<isNotEmpty prepend="AND" property="sendEndDate"><![CDATA[ SENDDATE <= #sendEndDate# ]]></isNotEmpty>
<isNotEmpty prepend="AND" property="acceptStartDate"><![CDATA[ ACCEPTDATE >= #acceptStartDate# ]]> </isNotEmpty>
<isNotEmpty prepend="AND" property="acceptEndDate"><![CDATA[ ACCEPTDATE <= #acceptEndDate# ]]></isNotEmpty>
ORDER BY ORDERID DESC
) ic
<![CDATA[
WHERE rownum <= #maxResult# ) row_
WHERE row_.rownum_ > #firstResult#
]]>
</select>
这里面第二个select的ic.*和rownum rownum_什么意思,我不太懂,解释一下
我用的是oracle数据库 展开
SELECT * FROM (
SELECT ic.*,rownum rownum_ FROM (
SELECT
ORDERID,
ORDERCODE,
LINKCODE,
ORDERTYPE,
ORDERSUBTYPE,
BIZTYPE,
GOODFLAG,
IMEITYPE,
STATUS,
FROMORGID,
TOORGID,
UGENTTYPE,
SENDDATE,
ACCEPTDATE,
MEMO
FROM ORDERS WHERE (TOORGID=#orgId# OR FROMORGID=#orgId#)
<isNotEmpty prepend="AND" property="fromOrgId"> FROMORGID=#fromOrgId# </isNotEmpty>
<isNotEmpty prepend="AND" property="toOrgId"> TOORGID=#toOrgId# </isNotEmpty>
<isNotEmpty prepend="AND" property="orderCode"> ORDERCODE LIKE '%'||#orderCode#||'%' </isNotEmpty>
<isNotEmpty prepend="AND" property="linkCode"> LINKCODE LIKE '%'||#linkCode#||'%' </isNotEmpty>
<isNotEmpty prepend="AND" property="orderType"> ORDERTYPE=#orderType# </isNotEmpty>
<isNotEmpty prepend="AND" property="orderSubType"> ORDERSUBTYPE=#orderSubType# </isNotEmpty>
<isNotEmpty prepend="AND" property="bizType"> BIZTYPE=#bizType# </isNotEmpty>
<isNotEmpty prepend="AND" property="goodFlag"> GOODFLAG=#goodFlag# </isNotEmpty>
<isNotEmpty prepend="AND" property="imeiType"> IMEITYPE=#imeiType# </isNotEmpty>
<isNotEmpty prepend="AND" property="status"> STATUS=#status# </isNotEmpty>
<isNotEmpty prepend="AND" property="sendStartDate"><![CDATA[ SENDDATE >= #sendStartDate# ]]> </isNotEmpty>
<isNotEmpty prepend="AND" property="sendEndDate"><![CDATA[ SENDDATE <= #sendEndDate# ]]></isNotEmpty>
<isNotEmpty prepend="AND" property="acceptStartDate"><![CDATA[ ACCEPTDATE >= #acceptStartDate# ]]> </isNotEmpty>
<isNotEmpty prepend="AND" property="acceptEndDate"><![CDATA[ ACCEPTDATE <= #acceptEndDate# ]]></isNotEmpty>
ORDER BY ORDERID DESC
) ic
<![CDATA[
WHERE rownum <= #maxResult# ) row_
WHERE row_.rownum_ > #firstResult#
]]>
</select>
这里面第二个select的ic.*和rownum rownum_什么意思,我不太懂,解释一下
我用的是oracle数据库 展开
2013-03-29
展开全部
oracle 中的rownum是个伪列,只有在有结果集的时候才有值;
内层先找到 rownum<=xxx 值:(rownum从1开始) 找到第一条记录 rownum =1, 1<=xxx正确,则返回该条记录,直到找到rownum= xxx的最后一条记录为止,因此内层 存在结果集了并且rownum还是从1(或者maxResult值)开始的值,因此,可以对着这个子查询 进行rownum>xxx操作了;
举个反例:表A中有100条数据
select * from a where rownum >= 50 and rownum <59;(该语句看似能查出10条记录,但是它一条记录也不会查出来)
分析:
先查找第一条记录 rownum 赋值为1 此时,1 <59 但是 1并不大于等于50 条件不符,
继续查找下一条 rownum 赋值为1 此时,1 <59 但是 1并不大于等于50 条件不符
直到 查询整个库 ,结果是没有符合条件的记录,因此就查不到记录了;
select * from (select rownum from a where rownum< 59) where rownum >=50
select rownum from a where rownum< 59
先查找第一条记录 rownum 赋值为1 此时,1 <59 条件符和,
继续找第二条记录 rownum此时赋值为2 ,2<59 条件符合,
直到 找到rownum = 58的记录为止,此时找到了所有符合条件的值,并且rownum是从1到58设值的, 此时就可以使用 >=50这个条件 将记录选出了;
------------------------------------
row_ 是子查询的一个别名,,
内层先找到 rownum<=xxx 值:(rownum从1开始) 找到第一条记录 rownum =1, 1<=xxx正确,则返回该条记录,直到找到rownum= xxx的最后一条记录为止,因此内层 存在结果集了并且rownum还是从1(或者maxResult值)开始的值,因此,可以对着这个子查询 进行rownum>xxx操作了;
举个反例:表A中有100条数据
select * from a where rownum >= 50 and rownum <59;(该语句看似能查出10条记录,但是它一条记录也不会查出来)
分析:
先查找第一条记录 rownum 赋值为1 此时,1 <59 但是 1并不大于等于50 条件不符,
继续查找下一条 rownum 赋值为1 此时,1 <59 但是 1并不大于等于50 条件不符
直到 查询整个库 ,结果是没有符合条件的记录,因此就查不到记录了;
select * from (select rownum from a where rownum< 59) where rownum >=50
select rownum from a where rownum< 59
先查找第一条记录 rownum 赋值为1 此时,1 <59 条件符和,
继续找第二条记录 rownum此时赋值为2 ,2<59 条件符合,
直到 找到rownum = 58的记录为止,此时找到了所有符合条件的值,并且rownum是从1到58设值的, 此时就可以使用 >=50这个条件 将记录选出了;
------------------------------------
row_ 是子查询的一个别名,,
2013-03-28
展开全部
举个例子:
select a.* from (select b.* from table_b b) a where rownum<10;
这是个子查询,第二个'select b.* from table_b b' 查询的结果集作为临时表,取个新名'a',
rownum是控制查询结果的条数,上面显示查询前9条数据
select a.* from (select b.* from table_b b) a where rownum<10;
这是个子查询,第二个'select b.* from table_b b' 查询的结果集作为临时表,取个新名'a',
rownum是控制查询结果的条数,上面显示查询前9条数据
追问
1、第三行SELECT ic.*,rownum rownum_ FROM,这里是不是直接SELECT ic.*,rownum FROM也可以?
2、最后面的
#firstResult#
]]>
我看不太懂!【WHERE rownum #firstResult#】
什么意思啊这个【row_】和【row_.rownum】哪里来的?row_可以连接两个where?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
编上序号的意思 自动从1开始排列
name age rownum_
tom 12 1
jack 11 2
...
name age rownum_
tom 12 1
jack 11 2
...
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询