smartbi-v7以高斯数据库作为数据源,sql查询报schema T708不存在

问题描述

如下图,两个简单的子查询,拼接后出现schema T708不存在的错误
软件:smartbi v7;华为高斯数据库主备版
在这里插入图片描述

问题分析

下述语句在navicat中执行正常,但在smartbi中却报错

SELECT a.ds ,a.esnq,b.esdb  //没有给字段别名
FROM
(
	SELECT ds,count(*) AS esnq
	FROM lsksmlydb
	WHERE dbsj<'2023-01-01'
	GROUP BY ds
	ORDER BY ds
) a
LEFT JOIN
(
	SELECT ds,count(*) AS esdb
	FROM lsksmlydb
	WHERE dbsj>='2024-01-01'
	GROUP BY ds
	ORDER BY ds
) b
on a.ds=b.ds
ORDER BY a.ds

观察报错截图,smartbi主动给我原始的sql语句的外面多套了一层:

select T708.a.ds as F723,T708. a.esng as F724,T708.b.esdb as F725 from  (..........) T708

因此问题在于外面加的这层东西身上。
经过别人的提醒,当前版本高斯数据库是不支持大写的,除了select 、from、left join等查询关键字。
所以很可能是smartbi自作主张给原始sql套了一层大写的别名后导致高斯数据库识别不了。

又已知,以前的多层嵌套的sql能正常在smartbi执行,对比了一下发现能执行的在原sql最外层都给字段加了小写别名。

此时可以确定,smartbi 在遇到有子查询的sql语句时,如果发现最外层的字段没有给别名,则会自动在外头再加一层,然后给各个字段加别名;如果最外层已经有别名,则不会再加别名。

问题定位

1.高斯数据库不支持大写的字段名、表名;
2.smarbi遇到嵌套子查询的sql语句时,若原始语句最外层没有添加字段别名,则在原始语句上再包一层,然后给一个新的表名和字段别名,且均为大写。

这将导致查数据库是,高斯数据库不能识别这些别名,导致语句报错。

问题解决

在遇到有子查询嵌套的sql语句时,应该在最外层的字段那里加上别名,从而避免smartbi自动给sql语句补全别名。入上述语句可改为:

SELECT a.ds as ds,a.esnq as esnq,b.esdb as esdb  //这里给字段加别名,其他不变
FROM
(
	SELECT ds,count(*) AS esnq
	FROM lsksmlydb
	WHERE dbsj<'2023-01-01'
	GROUP BY ds
	ORDER BY ds
) a
LEFT JOIN
(
	SELECT ds,count(*) AS esdb
	FROM lsksmlydb
	WHERE dbsj>='2024-01-01'
	GROUP BY ds
	ORDER BY ds
) b
on a.ds=b.ds
ORDER BY a.ds
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值