DB2의 임시 테이블로 선택

T-SQL에 대한 배경 지식이 풍부하지만 여전히 초보자 일 때이 질문을 시작하겠습니다. DB2에 적용됩니다.

루트 쿼리는 대략 다음과 같습니다.

Select Col1, Col2, Col3 From ( Select A.Col1, B.Col2, B.Col3 From SchemaA.TableA as A Inner Join SchemaA.TableB as B On A.Id = B.ParentId Where A.Col2 = "TypeValue" Fetch First 5 Rows Only -- This is not allowed in a union or sub select Union Select A.Col1, B.Col2, B.Col3 From SchemaB.TableA as A Inner Join SchemaB.TableB as B On A.Id = B.ParentId Where A.Col2 = "TypeValue" Fetch First 5 Rows Only -- This is not allowed in a union or sub select ) as Hybrid 

왜냐하면 Fetch First X Rows는 하위 선택이나 공용체에서 허용되지 않습니다. 이것은 “작동하지 않을 것입니다. 출력을 제한하고 있으므로 입력을 제한하는 것이 합리적입니다.

가짜 공용체를 얻을 수 있다고 생각합니다. 대신 내 하위 선택을 임시 테이블에 입력하고 대신 해당 출력을 반환합니다.

T-SQL에서 다음과 같은 쿼리를 사용하여 임시 테이블을 즉시 만들 수 있습니다. DB2에서 어떻게 수행합니까?

p>

Select * Into #Temp From TableA 

DB2에서는 어떻게해야합니까? 아니면 데이터를 삽입하기 전에 테이블을 만들어야합니까?

설명

  • 사용중인 Db2 버전은 무엇입니까?
  • 성명서를 뒷받침하는 출처도 포함 해 주시겠습니까? 유니온 또는 하위 선택에서는 허용되지 않습니다 .

답변

검색어에 의한 주문이 없으면 의미가 없습니다 (IMHO). 그럼에도 불구하고 다음과 같은 쿼리를 사용할 수 있습니다.

select * from ( select A.x from A order by x fetch first 2 rows only ) union all ( select B.x from B order by x fetch first 3 rows only ) ; 

Fiddle

Answer

이 문제는 각각 CTE를 사용하여 해결할 수 있다고 생각합니다. SYSIMB.TABLES 및 SYSIBM.VIEWS 테이블을 결합하여 예제를 만들었습니다. 둘 다 처음 5 개 행만 가져옵니다.

WITH tables ( name ) AS (SELECT tab.name FROM sysibm.SYSTABLES tab FETCH FIRST 5 rows only ) , views ( name ) AS (SELECT vie.name FROM sysibm.SYSVIEWS vie FETCH FIRST 5 rows only ) SELECT name FROM tables UNION SELECT name FROM views; 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다