问题描述
- 这个Oracle语句转成 mysql语句怎么写 ,我每次运行都有错误 2C
- select * from (select rownum rng.*c.name cname from shop_goods gshop_category c where g.categoryid=c.id
and g.categoryid=#{categoryid}
and g.name like #{name}
) r
where r.rn between (#{page}-1)*#{pageSize} and #{page}*#{pageSize}
解决方案
将里面的rownum去掉,里面的查询使用limit,不需要外面的嵌套就行了
select g.*c.name cname from shop_goods gshop_category c where g.categoryid=c.idand g.categoryid=#{categoryid} and g.name like #{name} limit indexpagesize
解决方案二:
Oracle语句和mysql语句基本上是相同的不同的是它们使用的关键字有些不同的关键字不同用法就不同了。你只要比较一下就知道怎么改了。
解决方案三:
参照以下方式改
select g.*c.name cname from shop_goods gshop_category c where g.categoryid=c.id and g.categoryid=#{categoryid} limit (#{page}-1)*#{pageSize}+1 #{pageSize}
--如果要显示伪列rn序号MySQL要这样用
SET @rowindex=0;
SELECT SQL_CALC_FOUND_ROWS @rowindex:=@rowindex+1 AS rng.*c.name cname from shop_goods gshop_category c where g.categoryid=c.id and g.categoryid=#{categoryid} limit (#{page}-1)*#{pageSize}+1 #{pageSize}
解决方案四:
eg:
select Sname
from Student
where Sno IN
(select Sno
from SC
where Cno='2'); ——括号里为内层查询
OR
select Student.SnoSname
from StudentSCCourse
where Student.Sno=SC.Sno AND
SC.Cno=Course.Cno AND
Course.Course='计算机';
两种方式都可使用