为什么我不能先在informix子​​查询中使用

时间:2014-03-26 00:34:22

标签: sql informix

为什么我不能在子查询中首先使用select?这里我有一些伪选择引发异常:Cannot use 'first', 'limit' or 'skip' in this context.

我不明白为什么。我想先选择10个ID,然后选择此集合中的其他表格行

select * from Table1 where ID in ( select  first 10  ID from Table2)

我该如何重写这个选择?

2 个答案:

答案 0 :(得分:7)

它不是很漂亮,但似乎有效:

SELECT * FROM _tmp_table 
WHERE id IN 
   (SELECT id FROM 
      (SELECT FIRST 10 id FROM _tmp_table)
   )

答案 1 :(得分:5)

因为这样设计......
我相信IBM Informix工程师对此有一些技术限制,因为很多Informix用户都提出了旧的功能要求......(尽管IBM RFE站点没有关于此的RFE)

如果您查看Informix Manuals you will found the answer quoted here

  

Projection子句不能包含SKIP,FIRST或LIMIT   这些环境中的关键字:

     
      
  • 当SELECT语句是视图定义的一部分时
  •   子查询中的
  • ,外部查询的FROM子句除外
  •   
  • 在跨服务器分布式查询中,其中参与的数据库服务器不支持SKIP,FIRST或LIMIT关键字。
  •   

就像@Michael的回答一样,只是一个明确的例子如何运作...... 这在版本11.70。

$ dbaccess -e sysmaster x.sql

Database selected.


select first 10 tabname[1,20] from systables
;

tabname

systables
syscolumns
sysindices
systabauth
syscolauth
sysviews
sysusers
sysdepend
syssynonyms
syssyntable

10 row(s) retrieved.


select t.tabname[1,20] from (select first 2 * from systables) as  t


tabname

systables
syscolumns

2 row(s) retrieved.


Database closed.