KDB получает только строки, присутствующие только в одной таблице

#kdb

Вопрос:

У меня есть две таблицы table1 и table2. У обоих есть 4 столбца с одинаковыми именами столбцов. таблица 1 содержит 50 строк, а таблица 2-100 строк. Как я могу получить только те строки из таблицы 2, которых нет в таблице 1. Я попытался выполнить левое соединение, но я не могу этого сделать, так как мы не можем выполнить левое соединение, используя все столбцы.

Ответ №1:

Поскольку таблицы представляют собой списки словарей, вы можете использовать except ключевое слово для исключения всех строк, из table2 которых они найдены table1 .

Например:

 q)table1:([]a:til 3;b:3#.Q.a;c:3#.Q.A)
q)table1
a b c
-----
0 a A
1 b B
2 c C

q)table2:([]a:til 6;b:6#.Q.a;c:6#.Q.A)
q)table2
a b c
-----
0 a A
1 b B
2 c C
3 d D
4 e E
5 f F

q)table2 except table1
a b c
-----
3 d D
4 e E
5 f F