Em banco de dados ou qlikview, quando trabalhamos com um volume grande de registros; temos que analisar o desempenho em utilizar a subquery.
Conforme o exemplo abaixo:
Em uma tabela com +- 12.000.000 (12 milhõres) de registro, com a seguinte estrutura.
ID | DT SOLICITAÇÃO | DT AGENDAMENTO | ID ORIGEM |
100 | 01/10/2014 | 01/12/2014 | 10 |
10 | 01/01/2014 | 01/09/2014 | |
101 | 10/10/2014 | 10/10/2014 | 50 |
50 | 05/02/2014 | 20/09/2014 |
Precisamos que a estrutura fique da seguinte forma, SEM UTILIZAR SUBQUERY
ID | DT SOLICITAÇÃO | DT AGENDAMENTO | ID ORIGEM | DT SOLIC. ORIGEM | DT AGEND. ORIGEM |
100 | 01/10/2014 | 01/12/2014 | 10 | 01/01/2014 | 01/09/2014 |
101 | 10/10/2014 | 10/10/2014 | 50 | 05/02/2014 | 20/09/2014 |
A solução que utilizei foi:
//CRIA TABELA TEMPORARIA SOMENTE COM REGISTROS BASE
SELECT
ID
,DT_SOLICITACAO
,DT_AGENDAMENTO
,ID_ORIGEM
INTO #ORIGEM
FROM
TABELA
WHERE
TABELA.ID_ORIGEM IS NULL
//CRIA TABELA TEMPORARIA COM REGISTROS RELACIONADOS
SELECT
ID
,DT_SOLICITACAO
,DT_AGENDAMENTO
,ID_ORIGEM
INTO #ATUAL
FROM
TABELA
WHERE
TABELA.ID_ORIGEM IS NOT NULL
//REALIZA RELACIONAMENTO ENTRE AS TABELAS, ADICIONANDO AS COLUNAS NECESSÁRIAS
SELECT
#ATUAL.ID
,#ATUAL.DT_SOLICITACAO
,#ATUAL.DT_AGENDAMENTO
,#ATUAL.ID_ORIGEM
,#ORIGEM.DT_SOLICITACAO AS [DT SOLIC. ORIGEM]
,#ORIGEM.DT_SOLICITACAO AS [DT AGEND. ORIGEM]
FROM
#ATUAL
LEFT JOIN
#ORIGEM ON #ATUAL.ID_ORIGEM = #ORIGEM.ID
Abaixo segue exemplo do Qlikview
Tabela 1
Chave | A |
---|---|
1 | A1 |
2 | A2 |
3 | A3 |
Tabela 2
Chave | C |
---|---|
1 | C1 |
2 | C2 |
4 | C3 |
Left Join
Left
irá retornar as linhas da tabela da esquerda e os campos da tabela da direita.
Tabela 1
Chave | A | C |
---|---|---|
1 | A1 | C1 |
2 | A2 | C2 |
3 | A3 | – |