Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
msludo
Contributor III
Contributor III

Subquery com claúsula IN: como fazer?

Boa tarde, 

 

Tenho 2 tabelas: A e B.

Tabela A tem um campo "numero_protocolo" com 4952 registros (que pode variar de acordo com o mes)

Tabela B tem o mesmo campo, porém tem mais de 15 milhões de registros.

Queria saber como fazer no qliksense para buscar informações  dos 4952 registros da tabela A na tabela B, SEM ter que carregar todos os registros da  tabela B e depois fazer um join com a tabela A.

Em BD, faria assim:

 

select *

from

tabelaB

where numero_protocolo in

( select numero_protocolo from tabelaA)

Como fazer isso no script qliksense?

 

 

Labels (2)
1 Solution

Accepted Solutions
msludo
Contributor III
Contributor III
Author

Tente isso:

[tabelaA]:
load numero_protocolo;
sql
select numero_protocolo from tabelaA;

NoConcatenate

 

//criar lista de todos os registros em uma única linha

[TabelaConcat]:
Load
CONCAT(distinct Chr(39)&numero_protocolo &Chr(39),' , ') as teste
resident [tabelaA];

let lista = peek('teste',0,'TabelaConcat');


[tabelaB]:
load numero_protocolo
;

sql SELECT numero_protocolo
FROM tabelaB
WHERE numero_protocolo in ($(lista));

View solution in original post

2 Replies
msludo
Contributor III
Contributor III
Author

Tente isso:

[tabelaA]:
load numero_protocolo;
sql
select numero_protocolo from tabelaA;

NoConcatenate

 

//criar lista de todos os registros em uma única linha

[TabelaConcat]:
Load
CONCAT(distinct Chr(39)&numero_protocolo &Chr(39),' , ') as teste
resident [tabelaA];

let lista = peek('teste',0,'TabelaConcat');


[tabelaB]:
load numero_protocolo
;

sql SELECT numero_protocolo
FROM tabelaB
WHERE numero_protocolo in ($(lista));

rbarbosa
Contributor III
Contributor III

Olá tudo bem?

 

A primeira diga seria dica uma extração de um QVD para cada uma das tabelas.

Depois fazer a busca utilizando a função where exists entre os QVD's.  (https://help.qlik.com/pt-BR/sense/May2022/Subsystems/Hub/Content/Sense_Hub/Scripting/InterRecordFunc...)

Isso traria mais performance e o mesmo resultado de um where no SQL, sem onerar sua base de dados principal.

Inclusive para a tabela de 15 mi de registros eu faria um qvd incremental.

Caso sua base já seja analítica, não já tanto problema, caso seja transacional, eu faria com mencionado.

Sucesso na jornada com Qlik, grande abraço!

Rodolfo Barbosa