子查询列名的问题

现有学生表、班级表,学生表关联到班级表,结构如下图:
  
执行查询:
select * from
(
 select rownum as r,t.* FROM
  (
   SELECT s.id, c.name FROM stuinfo s,classes c WHERE s.classesid=c.id
  )
t where rownum<=6) where r>4;
没问题,得到结果如下:

更改sql语句如下:
select * from
(
 select rownum as r,t.* FROM
  (
   SELECT s.id,s.name ,c.id ,c.name FROM stuinfo s,classes c WHERE s.classesid=c.id
  )
t where rownum<=6) where r>4;
执行结果报错,如下图:


分析结果由于学生表中有id,name,班级表中有id,name,联合查询以后列名都是id,name故外边的查询区分不开两个表的id、name,故各自给id、name取别名代替原有的列名,语句代码如下:
select * from
(
 select rownum as r,t.* FROM
  (
   SELECT s.id AS id1 ,s.name AS name1,c.id AS id2,c.name AS name2 FROM stuinfo s,classes c WHERE s.classesid=c.id
  )
t where rownum<=6) where r>4;
执行后问题解决,效果如下图:


猜你喜欢

转载自lichun01.iteye.com/blog/1736073