0

我正在为 IBM U2 Rocket 数据库开发一段 SQL。这不是我熟悉的 db 平台。

我不能直接访问这个数据库:我只能通过在调用代码中编写语句并从那里测试它来访问它。这使得在出现语法错误时找出问题所在有点尴尬。

我正在尝试编写一个在派生列上有条件的查询。据我所读到的有关数据库的信息,这应该可以工作:

SELECT a.*
FROM (
    SELECT dp.NAME
        ,dp.Code
        ,dp.BusinessType + ts.BusinessType AS bType
    FROM dataPoints dp
    LEFT OUTER JOIN trialSuppliers ts
    WHERE ts.AccountStatus = 'A'
    ) a
WHERE a.bType LIKE '%cho%'

但是,它会引发此错误:

在 UCI::SQLExecDirect() 中死亡,SQLSTATE 37000,本机错误:0 [IBM][SQL Client][UNIDATA]

如果您只运行内部查询,它工作正常。尝试使用任何类型的内部选择语句会导致它抛出相同的错误,即:

SELECT *
FROM (
    SELECT dp.NAME
        ,dp.Code
        ,dp.BusinessType + ts.BusinessType AS bType
    FROM dataPoints dp
    LEFT OUTER JOIN trialSuppliers ts
    WHERE ts.AccountStatus = 'A'
    )

仍然失败。

能够按派生列过滤我的查询的正确语法是什么?

4

1 回答 1

0

只是做了一些清理工作,最后的评论是否解决了问题?

我不是 UniData 用户,但在它的同父异母 UniVerse 中,“from 子句”必须是一个表。您必须在 where 子句中进行子查询。我会做你想做的事,在字典中添加几个 I 描述符。我经常发现 U2 产品有限的 SQL 合规性在某种程度上是一个障碍,但是当您的元数据位于数据外部并与数据分离时,您将失去一些结构化查询的完整性。– Van Amburg 2017 年 9 月 21 日在 17:31

于 2018-08-20T21:45:25.547 回答