过滤UniOLEDB中的派生列

时间:2017-08-07 13:52:39

标签: sql u2 rocket-u2

我正在为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客户端] [UNIDATA]

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

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'
    )

仍然失败。

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

1 个答案:

答案 0 :(得分:0)

只需进行一些清理,最后一条评论是否可以解决问题?

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