我正在为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'
)
仍然失败。
能够通过派生列过滤我的查询的正确语法是什么?
答案 0 :(得分:0)
只需进行一些清理,最后一条评论是否可以解决问题?
我不是UniData用户,但在UniVerse的近亲中,“ from子句”必须是一个表。您必须在where子句中进行子查询。我会做您想做的事情,在字典中添加几个I描述符。我经常发现U2产品的SQL遵从性有限,这在某种程度上是一个障碍,但是当您的元数据位于数据的外部并与数据分离时,您将失去一些结构化的查询完整性。 – Van Amburg 17年9月21日在17:31