Sql 尝试在DB2 db上运行查询时出现以下错误

Sql 尝试在DB2 db上运行查询时出现以下错误,sql,db2,Sql,Db2,我犯了这个错误 DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=((select * from ( select rownumber() over(;BEGIN-OF-STATEMENT;<delete>, DRIVER=3.50.152 Hibrnate解码查询: "((select * from ( select rownumber() over(order by ORGNAME)with ur) as rownumb

我犯了这个错误

DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=((select * from ( select rownumber() over(;BEGIN-OF-STATEMENT;<delete>, DRIVER=3.50.152
Hibrnate解码查询:

"((select * from ( select rownumber() over(order by ORGNAME)with ur) as rownumber_, ORGANIZATION.ORGNAME AS ORGNAME,SUBSCRIPTION.ID AS SUBSCRIPTIONID,SUBSCRIPTION.NUMBEROFAVAILABLESEATS AS AVAILABLESEATS FROM SUBSCRIPTION SUBSCRIPTION,ORGANIZATION ORGANIZATION,CUSTOMER CUSTOMER,CUSTOMERACCOUNT CUSTOMERACCOUNT WHERE ORGANIZATION.ISDELETED=0 AND SUBSCRIPTION.DELETED=0 AND CUSTOMERACCOUNT.ID=SUBSCRIPTION.CUSTOMERACCOUNTID AND CUSTOMER.ISDELETED=0 AND CUSTOMERACCOUNT.CUSTOMERID=CUSTOMER.ID AND CUSTOMER.PARTYID=ORGANIZATION.ID AND ISLIMITEDSEAT=1 UNION ALL SELECT ORGANIZATION.ORGNAME,SUBSCRIPTION.ID AS SUBSCRIPTIONID,-1 AS AVAILABLESEATS FROM SUBSCRIPTION SUBSCRIPTION,ORGANIZATION ORGANIZATION,CUSTOMER CUSTOMER,CUSTOMERACCOUNT CUSTOMERACCOUNT WHERE ORGANIZATION.ISDELETED=0 AND SUBSCRIPTION.DELETED=0 AND CUSTOMERACCOUNT.ID=SUBSCRIPTION.CUSTOMERACCOUNTID AND  CUSTOMER.ISDELETED=0 AND CUSTOMERACCOUNT.CUSTOMERID=CUSTOMER.ID AND CUSTOMER.PARTYID= ORGANIZATION.ID AND ISLIMITEDSEAT=0) results order by ORGNAME)with ur ) as temp_ where rownumber_ <= ?"

我稍微格式化了一下查询。不过,我不确定语法是否正确。order by看起来有点孤独,没有匹配的select,我不确定with应该做什么

((SELECT ORGANIZATION.ORGNAME AS ORGNAME, 
    SUBSCRIPTION.ID AS SUBSCRIPTIONID,
    SUBSCRIPTION.NUMBEROFAVAILABLESEATS AS AVAILABLESEATS 
  FROM SUBSCRIPTION SUBSCRIPTION,
       ORGANIZATION ORGANIZATION,
       CUSTOMER CUSTOMER,
       CUSTOMERACCOUNT CUSTOMERACCOUNT 
  WHERE ORGANIZATION.ISDELETED=0 AND SUBSCRIPTION.DELETED=0 
    AND CUSTOMERACCOUNT.ID=SUBSCRIPTION.CUSTOMERACCOUNTID 
    AND CUSTOMER.ISDELETED=0 
    AND CUSTOMERACCOUNT.CUSTOMERID=CUSTOMER.ID
    AND CUSTOMER.PARTYID=ORGANIZATION.ID 
    AND ISLIMITEDSEAT=1 
UNION ALL 
  SELECT ORGANIZATION.ORGNAME,
         SUBSCRIPTION.ID AS SUBSCRIPTIONID,
         -1 AS AVAILABLESEATS 
  FROM SUBSCRIPTION SUBSCRIPTION,
       ORGANIZATION ORGANIZATION,
       CUSTOMER CUSTOMER,
       CUSTOMERACCOUNT CUSTOMERACCOUNT 
  WHERE ORGANIZATION.ISDELETED=0 
    AND SUBSCRIPTION.DELETED=0 
    AND CUSTOMERACCOUNT.ID=SUBSCRIPTION.CUSTOMERACCOUNTID 
    AND  CUSTOMER.ISDELETED=0 
    AND CUSTOMERACCOUNT.CUSTOMERID=CUSTOMER.ID 
    AND CUSTOMER.PARTYID=ORGANIZATION.ID 
    AND ISLIMITEDSEAT=0
 ) results order by ORGNAME
)with ur

您最初的问题可能是由于括号的位置,但由于所发生的事情的长度和复杂性,很难解决

我将把几个建议放在一起,为您提供一个简短得多的查询,这应该也会大大加快速度,让下一个人更容易理解

让我们看看发生了什么。你有两个几乎相同的选择粘在一起。假设我们将它们重新网格化为一个选择

一点逻辑,以一个CASE表达式的形式,总的来说比合并并重新排序的两个选择要少得多

除非您要创建缩写,否则没有必要重复每个表名:

  FROM SUBSCRIPTION SUBSCRIPTION,
如果您在FROM子句而不是WHERE子句中指定联接条件,则下一个人通常会觉得更清楚

SELECT ORGANIZATION.ORGNAME,
       SUBSCRIPTION.ID         AS SUBSCRIPTIONID,
       CASE WHEN SUBSCRIPTION.ISLIMITEDSEAT = 1
            THEN SUBSCRIPTION.NUMBEROFAVAILABLESEATS
            ELSE -1 
        END                    AS AVAILABLESEATS
  FROM ORGANIZATION
  JOIN CUSTOMER
    ON  CUSTOMER.PARTYID = ORGANIZATION.ID
  JOIN CUSTOMERACCOUNT
    ON  CUSTOMERACCOUNT.CUSTOMERID = CUSTOMER.ID
  JOIN SUBSCRIPTION
    AND SUBSCRIPTION.CUSTOMERACCOUNTID = CUSTOMERACCOUNT.ID
  WHERE ORGANIZATION.ISDELETED=0
    AND SUBSCRIPTION.DELETED=0
    AND CUSTOMER.ISDELETED=0
    AND SUBSCRIPTION.ISLIMITEDSEAT IN (0,1) 

如果SUBSCRIPTION.ISLIMITEDSEAT是一个只能为0或1的标志,然后删除最后一行。

请编辑你的标题和正文。我认为你有太多不必要的括号。我尝试删除这一点,即使是在你的意思相同的情况下使用未注释的read。在这种情况下,你应该能够删除外部select,它作为结果,并获得相同的输出。看起来你让事情变得更复杂了。
  FROM SUBSCRIPTION SUBSCRIPTION,
SELECT ORGANIZATION.ORGNAME,
       SUBSCRIPTION.ID         AS SUBSCRIPTIONID,
       CASE WHEN SUBSCRIPTION.ISLIMITEDSEAT = 1
            THEN SUBSCRIPTION.NUMBEROFAVAILABLESEATS
            ELSE -1 
        END                    AS AVAILABLESEATS
  FROM ORGANIZATION
  JOIN CUSTOMER
    ON  CUSTOMER.PARTYID = ORGANIZATION.ID
  JOIN CUSTOMERACCOUNT
    ON  CUSTOMERACCOUNT.CUSTOMERID = CUSTOMER.ID
  JOIN SUBSCRIPTION
    AND SUBSCRIPTION.CUSTOMERACCOUNTID = CUSTOMERACCOUNT.ID
  WHERE ORGANIZATION.ISDELETED=0
    AND SUBSCRIPTION.DELETED=0
    AND CUSTOMER.ISDELETED=0
    AND SUBSCRIPTION.ISLIMITEDSEAT IN (0,1)