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
Leftirá 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 | – |