Idioma Q - Associa-se

Dentro qlinguagem, temos diferentes tipos de junções com base nas tabelas de entrada fornecidas e o tipo de tabelas associadas que desejamos. Uma junção combina dados de duas tabelas. Além da busca de chave estrangeira, existem quatro outras maneiras de unir tabelas -

  • Junção simples
  • Assim que entrar
  • Associação à esquerda
  • União

Aqui, neste capítulo, discutiremos cada uma dessas junções em detalhes.

Junção Simples

A junção simples é o tipo mais básico de junção, executada com uma vírgula ','. Neste caso, as duas tabelas devem sertype conformant, ou seja, ambas as tabelas têm o mesmo número de colunas na mesma ordem e mesma chave.

table1,:table2 / table1 is assigned the value of table2

Podemos usar junção de cada vírgula para tabelas com o mesmo comprimento para junção lateral. Uma das tabelas pode ser codificada aqui,

Table1, `Table2

Asof Join (aj)

É a junção mais poderosa que é usada para obter o valor de um campo em uma tabela a partir do momento em outra tabela. Geralmente é usado para obter a oferta e solicitação prevalecentes no momento de cada negociação.

Formato geral

aj[joinColumns;tbl1;tbl2]

Por exemplo,

aj[`sym`time;trade;quote]

Exemplo

q)tab1:([]a:(1 2 3 4);b:(2 3 4 5);d:(6 7 8 9))

q)tab2:([]a:(2 3 4);b:(3 4 5); c:( 4 5 6))

q)show aj[`a`b;tab1;tab2]

 a  b  d  c
-------------
 1  2  6
 2  3  7  4
 3  4  8  5
 4  5  9  6

Junção à esquerda (lj)

É um caso especial de aj onde o segundo argumento é uma tabela com chave e o primeiro argumento contém as colunas da chave do argumento correto.

Formato geral

table1 lj Keyed-table

Exemplo

q)/Left join- syntax table1 lj table2 or lj[table1;table2]

q)tab1:([]a:(1 2 3 4);b:(2 3 4 5);d:(6 7 8 9))

q)tab2:([a:(2 3 4);b:(3 4 5)]; c:( 4 5 6))

q)show lj[tab1;tab2]

 a  b  d  c
-------------
 1  2  6
 2  3  7  4
 3  4  8  5
 4  5  9  6

União Sindical (uj)

Permite criar uma união de duas tabelas com esquemas distintos. É basicamente uma extensão da junção simples (,)

q)tab1:([]a:(1 2 3 4);b:(2 3 4 5);d:(6 7 8 9))

q)tab2:([]a:(2 3 4);b:(3 4 5); c:( 4 5 6))

q)show uj[tab1;tab2]

 a  b  d  c
------------
 1  2  6
 2  3  7
 3  4  8
 4  5  9
 2  3     4
 3  4     5
 4  5     6

Se você estiver usando uj em tabelas chaveadas, as chaves primárias devem corresponder.