将两个Oracle SQL查询与四个表中的一个LEFT OUTER JOIN和两个INNER JOINS组合起来

问题描述:

我在Oracle中有两个我想合并的SQL查询。第一个查询从表中返回域描述,第二个查询将仅返回输入参数(COST_CENTER)中存在的域描述。将两个Oracle SQL查询与四个表中的一个LEFT OUTER JOIN和两个INNER JOINS组合起来

第一次查询:

SELECT distinct condition as condition_code, value as condition_literal 
FROM CULVERT_INSPECT 
    LEFT OUTER JOIN 
    (SELECT EXTRACTVALUE (CodedValues.COLUMN_VALUE, 'CodedValue/Code') 
       AS Code, 
      EXTRACTVALUE (CodedValues.COLUMN_VALUE, 'CodedValue/Name') 
       AS VALUE 
     FROM GDB_ITEMS_VW items 
      INNER JOIN GDB_ITEMTYPES itemtypes 
       ON items.TYPE = itemtypes.UUID, 
      TABLE (
       XMLSEQUENCE (
       XMLType (Definition).EXTRACT (
        '/GPCodedValueDomain2/CodedValues/CodedValue'))) 
CodedValues 
    WHERE itemtypes.Name = 'Coded Value Domain' 
      AND items.Name = 'OVERALL_CONDITION') coded_values 
      on CULVERT_INSPECT.condition = coded_values.code 
ORDER BY CONDITION_CODE 

第二查询:

SELECT distinct CULVERT_INSPECT.CONDITION 
FROM CULVERTS 
    INNER JOIN CULVERT_INSPECT ON (CULVERTS.GLOBALID_1 = 
CULVERTGID) 
WHERE COST_CENTER = '551807' 

从第一查询的输出:

CONDITION_CODE CONDITION_LITERAL 
0    Excellent - Like New 
1    Good - Some Wear, Structurally Sound 
2    Poor - Deteriorated, Consider For Repair 
3    Very Poor - Serious Deterioration 
4    Inaccessible 
+0

'CULVERTGID'是来自'CULVERT_INSPECT'的一列 - 对于给定的'CONDITION',它在'CULVERT_INSPECT'中是唯一的吗? –

+0

@KaushikNayak是的,'CULVERTGID'是'CULVERT_INSPECT'中的一列。这是一个独特的ID,但不适用于给定的“CONDITION”。 –

+0

只需确认一下,如果在选择第一个查询中包含'CULVERTGID',您会得到相同的行数? –

此使用with clause尝试。由于没有样本数据,所以未经测试。

WITH cons 
     AS (SELECT DISTINCT culvertgid , condition AS condition_code, 
          value  AS condition_literal 
      FROM culvert_inspect 
        LEFT OUTER JOIN (SELECT Extractvalue (CodedValues.column_value, 
              'CodedValue/Code') AS Code, 
              Extractvalue (CodedValues.column_value, 
              'CodedValue/Name') AS VALUE 
            FROM gdb_items_vw items 
              inner join gdb_itemtypes itemtypes 
                ON items.TYPE = itemtypes.uuid, 
              TABLE (
      Xmlsequence (Xmltype (DEFINITION).EXTRACT (
         '/GPCodedValueDomain2/CodedValues/CodedValue'))) 
          CodedValues 
        WHERE itemtypes.name = 'Coded Value Domain' 
          AND items.name = 'OVERALL_CONDITION') 
        coded_values 
       ON culvert_inspect.condition = coded_values.code) 
    SELECT DISTINCT ci.condition_code 
    FROM culverts c 
      INNER JOIN cons ci 
        ON (c.globalid_1 = ci.culvertgid) 
    WHERE cost_center = '551807' 
    ORDER BY condition_code; 
+0

它回来了ORA-00904:“CI”。“CULVERTGID”:无效标识符 –

+0

立即检查。它并没有在条款 –

+0

中加入这个工作!非常感谢! –