Q Language - присоединяется

В qНа языке, у нас есть различные типы объединений на основе предоставленных входных таблиц и желаемых типов объединяемых таблиц. Объединение объединяет данные из двух таблиц. Помимо поиска по внешнему ключу, есть еще четыре способа соединения таблиц:

  • Простое присоединение
  • Присоединиться к
  • Левое соединение
  • Союз присоединиться

Здесь, в этой главе, мы подробно обсудим каждое из этих объединений.

Простое присоединение

Простое соединение - это самый простой тип соединения, выполняемый через запятую ','. В этом случае две таблицы должны бытьtype conformant, т. е. обе таблицы имеют одинаковое количество столбцов в одинаковом порядке и одинаковый ключ.

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

Мы можем использовать соединение каждой запятой для таблиц одинаковой длины, чтобы соединиться боком. Здесь можно указать одну из таблиц,

Table1, `Table2

Асоф присоединиться (aj)

Это наиболее мощное соединение, которое используется для получения значения поля в одной таблице, а также значения поля в другой таблице. Обычно он используется для получения преобладающего спроса и предложения во время каждой сделки.

Общий формат

aj[joinColumns;tbl1;tbl2]

Например,

aj[`sym`time;trade;quote]

пример

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

Левое соединение (lj)

Это частный случай aj, где второй аргумент - это таблица с ключами, а первый аргумент содержит столбцы ключа правого аргумента.

Общий формат

table1 lj Keyed-table

пример

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

Союз Присоединиться (uj)

Это позволяет создать объединение двух таблиц с разными схемами. По сути, это расширение простого соединения (,)

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

Если вы используете uj для таблиц с ключами, тогда первичные ключи должны совпадать.