免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2357 | 回复: 3
打印 上一主题 下一主题

IQ视图查询出错!急 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-19 15:11 |只看该作者 |倒序浏览
我在IQ新建一个视图,其中select字句含有嵌套子查询,语句如下:
create view tmp as
select a.f1, (select b.f1 from b where b.f2=a.f2) as fx
from a;

生成VIEW时正常,查询VIEW时则提示:Subqueries are allowed only as arguments of comparisons,IN,and EXISTS。
但直接运行其中的select 语句可以查询出数据,没有任何出错,语句如下
select a.f1, (select b.f1 from b where b.f2=a.f2) as fx
from a;
后来发现将表b改为sys用户下的表名则可以查询。

请问IQ的视图是否不允许嵌套子查询?或用户建的表不能用在子查询中?
因a表中的字段大多数是编码,需要关联多个维表来显示中文名称,如果采用外连接是否会导致性能下降?
还有什么办法可以处理这种情况?

恳请各位指导!

[ 本帖最后由 rlt 于 2009-7-19 15:48 编辑 ]

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
2 [报告]
发表于 2009-07-20 07:58 |只看该作者
后来发现将表b改为sys用户下的表名则可以查询。
是什么意思?改了view的定义就好了?

论坛徽章:
0
3 [报告]
发表于 2009-07-20 09:20 |只看该作者
子查询改为查系统表(以“sys.”开头的表)的话,视图就可以正常查询。
如果改为用户定义的表,查询时就会提示“Subqueries are allowed only as arguments of comparisons,IN,and EXISTS”。
可以在IQ建个视图试试。

我现在想搞清楚IQ是否不允许视图采用嵌套子查询,或者是视图定义的语法有误?
如果不行的话就只能通过外连接取字典值了。

论坛徽章:
0
4 [报告]
发表于 2009-07-20 09:36 |只看该作者
你的问题有多个:
1. IQ 为什么创建view时不报错,而运行时候报错?

   IQ在创建view是并不进行语法和语意检查;但是运行时候需要。

2. 为什么改为系统表就可以,而base表出错?

   系统表存放在ASA中,它的语法和行为和IQ base表的语法和行为不同。

3. 如何避免?

  建议使用join。Join并不会导致性能下降,想法substring可能会导致,因为IQ会尽量将这种查询转换为join。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP