Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么我不能在informix子查询中使用first_Sql_Informix - Fatal编程技术网

Sql 为什么我不能在informix子查询中使用first

Sql 为什么我不能在informix子查询中使用first,sql,informix,Sql,Informix,为什么我不能在子查询中使用select first?这里我有一些伪选择抛出异常:在这个上下文中不能使用“first”、“limit”或“skip” 我不明白为什么。我想先选择前10个ID,然后选择此集合中的其他表行 select * from Table1 where ID in ( select first 10 ID from Table2) 我应该如何重写此选择?它不是很漂亮,但似乎可以工作: SELECT * FROM _tmp_table WHERE id IN (SE

为什么我不能在子查询中使用select first?这里我有一些伪选择抛出异常:在这个上下文中不能使用“first”、“limit”或“skip”

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

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

我应该如何重写此选择?

它不是很漂亮,但似乎可以工作:

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

因为它是这样设计的。。。 我相信IBM Informix工程师在这方面有一些技术限制,因为这是来自许多Informix用户的旧特性请求。。。尽管现场没有关于此的RFE

如果您选中以下选项:

Projection子句不能包含SKIP、FIRST或LIMIT 这些上下文中的关键字:

当SELECT语句是视图定义的一部分时 在子查询中,外部查询的FROM子句中除外 在跨服务器分布式查询中,参与查询的数据库服务器不支持SKIP、FIRST或LIMIT关键字。 就像@Michael answer一样,这只是一个清晰的例子。。。 这将在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.

hm ok这解决了问题,但是为什么informx db中有这样的限制?有趣的是,从sysmaster中选择第一个1:sysdual从sysmaster:sysdual中选择不允许,但是从sysmaster:sysdual中选择第一个x从sysmaster:sysdual中选择x是允许的。这基本上是相同的背景。