对于以下查询,我在Oracle SQL Developer中面临Missing expresssions错误, 有人可以帮我解决这个问题。
SELECT COUNT(DISTINCT SEC.ERROR_GROUP_ID),
COUNT(DISTINCT SEC_DET.ERROR_GROUP_ID),
COUNT(DISTINCT MB.ERROR_GROUP_ID),
COUNT(DISTINCT OD.ERROR_GROUP_ID),
SELECT COUNT(DISTINCT SEC_SCH.ERROR_GROUP_ID)
FROM SCHEMA.SECURITY SEC
LEFT OUTER JOIN SCHEMA.SECURITY_SCHEDULE SEC_SCH
ON SEC.MSD_SECURITY_ID =SEC_SCH.MSD_SECURITY_ID
WHERE SEC.MSD_SECURITY_ID IN
( SELECT DISTINCT main.MSD_SECURITY_ID
FROM SCHEMA2.Positions main
WHERE main.QUANTITY != 0
AND systimestamp >= main.eff_from_dt
AND main.eff_to_dt > systimestamp
AND systimestamp >= main.asrt_from_dt
AND main.asrt_to_dt > systimestamp
)
FROM SCHEMA.SECURITY SEC
JOIN SCHEMA.SECURITY_DETAIL SEC_DET
ON SEC.MSD_SECURITY_ID = SEC_DET.MSD_SECURITY_ID
LEFT OUTER JOIN SCHEMA.MUNI_BOND MB
ON SEC.MSD_SECURITY_ID=MB.MSD_SECURITY_ID
LEFT OUTER JOIN SCHEMA.OPTION_DETAIL OD
ON SEC.MSD_SECURITY_ID =OD.MSD_SECURITY_ID
WHERE SEC.MSD_SECURITY_ID IN
( SELECT DISTINCT main.MSD_SECURITY_ID
FROM SCHEMA2.Positions main
WHERE main.QUANTITY != 0
AND systimestamp >= main.eff_from_dt
AND main.eff_to_dt > systimestamp
AND systimestamp >= main.asrt_from_dt
AND main.asrt_to_dt > systimestamp
) ;
错误
ORA-00936:表达式缺失
00936. 00000 - “缺少表达”
*原因:
*行动:
行错误:365列:3
答案 0 :(得分:1)
子查询必须包装在括号中。一旦你添加它们,Oracle应该停止抱怨。
答案 1 :(得分:0)
子查询确实需要在括号中。子查询可能只使用COUNT(DISTINCT)
而不是嵌套子查询来编写:
SELECT COUNT(DISTINCT SEC.ERROR_GROUP_ID),
COUNT(DISTINCT SEC_DET.ERROR_GROUP_ID),
COUNT(DISTINCT MB.ERROR_GROUP_ID),
COUNT(DISTINCT OD.ERROR_GROUP_ID),
(SELECT COUNT(DISTINCT SEC_SCH.ERROR_GROUP_ID)
FROM SCHEMA.SECURITY SEC LEFT OUTER JOIN
SCHEMA.SECURITY_SCHEDULE SEC_SCH
ON SEC.MSD_SECURITY_ID = SEC_SCH.MSD_SECURITY_ID
WHERE SEC.MSD_SECURITY_ID IN ( <values>)
) . . .
请注意,这与查询的语义差异非常小。这不会计算NULL
值,而您的版本会计算 (SELECT COUNT(DISTINCT SEC_SCH.ERROR_GROUP_ID) + MAX(CASE WHEN SEC_SCH.ERROR_GROUP_ID IS NULL THEN 1 ELSE 0 END)
FROM SCHEMA.SECURITY SEC LEFT OUTER JOIN
SCHEMA.SECURITY_SCHEDULE SEC_SCH
ON SEC.MSD_SECURITY_ID = SEC_SCH.MSD_SECURITY_ID
WHERE SEC.MSD_SECURITY_ID IN ( <values>)
) . . .
。您可以通过执行以下操作获得相同的语义:
{{1}}
为此目的使用子查询是不常见的。我想知道你是否可以使用分析函数。