informix嵌套查询问题,求助高手
SQL语句如下:
SELECT * FROM ( SELECT first 200 * from cts_trans order by mon_date DESC, mon_id DESC ) t order by
mon_date , mon_id
想实现从 cts_trans 表中,查出最后200条记录,然后将这200 条记录按升序排列。在sql server 下,将“first” 换成“top” 执行通过。在informix,进dbaccess命令行执行 ,报错如下(first 换成 top 也是一样):
201: A syntax error has occurred.
[解决办法]
informix不支持这种嵌套查询,你可以用临时表来实现
SELECT first 200 * from cts_trans order by mon_date DESC, mon_id DESC into temp xx;
SELECT * FROM xx order by mon_date , mon_id
[解决办法]
支持1楼的,informix不支持同一张嵌套查询,但不同表是可以的,比如:
select col1,col2 from table1 where col1 in (select col3 from table2 where...)
[解决办法]
1楼的回复有问题。 在into temp的这种方式下是不支持first关键字的。反正使用first限制很多,比如不能用在视图的定义中,不能用在嵌套sql中,不能用在子查询中,不能用在insert的select子句中,不能用在将查询到的数据插入临时表的select中等等。
在informix里面要用一个sql来实现楼主的这个要求,没想出来这么搞。
[解决办法]
的确first嵌套里面不能用,你这里又不需要嵌套查询,括号里不是已经降序排列了?括号外面你又变成升序排列了。
不折腾....
[解决办法]
要升序直接去掉括号里的DESC,不对吗?
[解决办法]
你可以写个SP,里面用
....
foreach
SELECT first 200 *
into: ls_goodcd,
...
from cts_trans order by mon_date DESC, mon_id DESC ;
insert into temp ss (....)
values(...)
end foreach
foreach
SELECT a
into: ls_goodcd,
ls_gdcdnm,
...
FROM ss order by mon_date , mon_id
end foreach
return ls_goodcd,ls_gdcdnm.......
........
[解决办法]
不会,帮忙顶起来