2017-10-17 4 views
0

오라클에 두 개의 SQL 쿼리를 결합하고 있습니다. 첫 번째 쿼리는 테이블에서 도메인 설명을 반환하고 두 번째 쿼리는 입력 매개 변수 (COST_CENTER) 내에 존재하는 도메인 설명 만 반환합니다.하나의 LEFT OUTER JOIN과 두 개의 INNER JOINS가있는 두 개의 Oracle SQL 쿼리를 네 개의 테이블로 결합하십시오.

1 쿼리 :

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 

2 검색어 : 첫 번째 쿼리에서

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이지만 주어진 '조건'에 대한 ID는 아닙니다. –

+0

그리고 첫 번째 질의에'CULVERTGID'를 포함 시키면 동일한 수의 행을 얻을 수 있습니다. –

답변

2

이이 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

그게 효과가! 정말 고맙습니다! –