【DM版本】:dm8_20230808_rev197096_x86_rh6_64_single.tar
【操作系统】:Docker version 25.0.3, build 4debf41
【CPU】:
【问题描述】*:数据库是由SQL Server迁移至DM8的,原本的OUTER APPLY
语法在DM8中不能使用了,报错:列[APPLY]附近出现错误: 语法分析出错
。
于是我搜索OUTER APPLY,居然在官方手册里面找到这个4.2.8 JOIN APPLY,其中就有OUTER APPLY
的例子,我尝试了一下,还是报错:
总共1个语句正依次执行...
[执行语句1]:
SELECT * FROM T1 OUTER APPLY(SELECT * FROM T2 WHERE C1=D1);
执行失败(语句1)
-2007: 第 1 行, 第 45 列[APPLY]附近出现错误:
语法分析出错
1条语句执行失败
这种情况是数据库版本太低了吗?
另外,OUTER APPLY
有没有替代写法?
我想实现的是可以在子查询中以外部表的字段作为查询条件,但join是不能实现的。
SELECT A.*,B.Id AS BId
FROM T1 A
OUTER APPLY (
SELECT TOP 1 Id
FROM T2
WHERE T1Id = A.Id
ORDER BY Id DESC
) B
2023年3季度(8.1.3.62)版扩展连接语法,新增加 CROSS APPLY、OUTER APPLY 关键字,并可通过会话级 INI 参数 ENABLE_TABLE_EXP_REF_FLAG 控制是否支持 CROSS\OUTER APPLY,0 表示不支持,1 表示支持,默认值为 1。
查询版本:
select id_code,* from v$version;
可以联系本地技术支持获取,或者用下面的安装包测试下:
链接地址:https://eco.dameng.com/s/RN80HLIGUN 提取码:qa25
应该是版本问题吧,我下载官网最新的版本测试是没问题的。--03134284132-20231226-213242-20081
