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 ) ;
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;