2012-05-31 55 views
-1

我做的EM的报告,我需要弄清楚的财产以后这里的Oracle SQL - 子查询

我有这个疑问,我提出:

SELECT 
* 
FROM 
(
    SELECT DISTINCT 
    patch.host as "PHost", 
    patch.home_location as "PDirectory", 
    patch.home_name as "PHome", 
    MAX(patch.INSTALLATION_TIME) as "Patched (Date)", 
    MAX(patch.PATCH_RELEASE) as "PVersion", 
    listagg(patch,',') WITHIN GROUP (ORDER BY patch) "Patches" 
    FROM 
    mgmt$applied_patches patch 
    GROUP BY patch.host, patch.home_location,patch.home_name 
    ORDER BY patch.host, patch.home_location 
) "PCH", 
(
    SELECT DISTINCT 
    T1.PROPERTY_VALUE as "MHost", 
    T2.PROPERTY_VALUE as "MDirectory", 
    T3.PROPERTY_VALUE as "MVersion", 
    count(T4.PROPERTY_VALUE) as "Count of SID", 
    listagg(T4.PROPERTY_VALUE,',') WITHIN GROUP (ORDER BY T4.PROPERTY_VALUE) as "SID" 
    FROM 
    MGMT$TARGET_PROPERTIES T1, 
    MGMT$TARGET_PROPERTIES T2, 
    MGMT$TARGET_PROPERTIES T3, 
    MGMT$TARGET_PROPERTIES T4 
    WHERE 
    T1.TARGET_GUID = T2.TARGET_GUID 
    and T1.TARGET_GUID = T3.TARGET_GUID 
    and T1.TARGET_GUID = T4.TARGET_GUID 
    and T1.PROPERTY_NAME = 'MachineName' 
    and T2.PROPERTY_NAME = 'OracleHome' 
    and T3.PROPERTY_NAME = 'Version' 
    and T4.PROPERTY_NAME = 'SID' 
    GROUP BY T1.PROPERTY_VALUE, T2.PROPERTY_VALUE, T3.PROPERTY_VALUE 
) "MGM" 
WHERE 
PDirectory = MDirectory 

我得到错误ORA-00904 :“MDIRECTORY”:....

我尝试了很多组合! (PCH.PDirectory = MGM.MDirectory,......),实在不行

欢呼

+0

[ORA-00904:invalid identifier]可能的重复(http://stackoverflow.com/questions/6027961/ora-00904-invalid-identifier) – APC

+0

嗨,不是真的一样! –

+0

其实它完全一样:在双引号中使用混合大小写标签引起的ORA-00904(无效标识符),但引用它们时不带双引号。 – APC

回答

1

嗯......

这不起作用:

SELECT * FROM 
(SELECT DUMMY AS "PDirectory" FROM DUAL) "PCH", 
(SELECT DUMMY AS "MDirectory" FROM DUAL) "MGR" 
WHERE PDIRECTORY = MDIRECTORY 

但这个工程:相应

SELECT * FROM 
(SELECT DUMMY AS "PDirectory" FROM DUAL) "PCH", 
(SELECT DUMMY AS "MDirectory" FROM DUAL) "MGR" 
where "PCH"."PDirectory" = "MGR"."MDirectory" 

改变您的查询。

2

混合大小写的名字在甲骨文是可憎的,你只不过是被他们咬伤。

用途:

"PDirectory" = "MDirectory" 

..或者更好的是不使用需要引用的特殊名称。