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)