Selecione em uma tabela temporária no DB2

Deixe-me começar esta pergunta, embora eu tenha um forte conhecimento em T-SQL, mas ainda sou apenas um novato trata-se do DB2.

A consulta raiz é mais ou menos assim:

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 

Porque Fetch First X Rows não é permitido em subseleções ou com sindicatos, isso não vai funcionar. Já que estamos limitando a saída, faz sentido limitar a entrada.

Acho que posso conseguir uma união falsa alimentando minhas subseleções em tabelas temporárias e retornando essa saída.

No T-SQL, posso criar uma tabela temporária instantaneamente com uma consulta como esta, como faria isso no DB2?

Select * Into #Temp From TableA 

Como eu faria isso no DB2? Ou eu precisaria criar a tabela antes de inserir dados nela?

Comentários

  • Qual versão do Db2 você está usando?
  • Você também pode incluir a fonte que apóia sua declaração: Isso não é permitido em um sindicato ou subselecionado .

Resposta

Sem uma ordem por sua consulta não faz sentido (IMHO). Mesmo assim, você ainda pode usar uma consulta como:

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

Eu criei um pequeno exemplo para você brincar em Fiddle

Resposta

Acho que isso pode ser resolvido usando um CTE para cada um dos dois selects.

Criei um exemplo para você juntando as tabelas SYSIMB.TABLES e SYSIBM.VIEWS. De ambos, busco apenas as primeiras 5 linhas.

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; 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *