Sql 为什么我不能在informix子查询中使用first
为什么我不能在子查询中使用select first?这里我有一些伪选择抛出异常:在这个上下文中不能使用“first”、“limit”或“skip” 我不明白为什么。我想先选择前10个ID,然后选择此集合中的其他表行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 * 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是允许的。这基本上是相同的背景。