为什么我不能在子查询中首先使用select?这里我有一些伪选择引发异常:Cannot use 'first', 'limit' or 'skip' in this context.
我不明白为什么。我想先选择10个ID,然后选择此集合中的其他表格行
select * from Table1 where ID in ( select first 10 ID from Table2)
我该如何重写这个选择?
答案 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.