Я хочу запустить обычный SQL-стиль оставил присоединиться к KDB +/Q.Как выполнить эффективное левое соединение в kdb?
- Мы получаем по крайней мере одну строку в результате для каждой строки в левой таблице.
- Если есть больше чем один матч в таблице справа, я получаю строку для каждого из них, а не только для первого матча
Test Data
x:([];a:1 1 2 3; b:3 4 5 6)
y:([]; a:1 2 2 4; c:7 8 9 10)
Лучший версия, о которой я могу думать, выглядит следующим образом:
Это добавляет левое соединение, которое обеспечивает только первое совпадение с внутренним соединением, которое предоставляет все совпадения, а затем удаляет дубликаты:
distinct ej[`a; x; y] , x lj `a xkey y
Может кто-нибудь предоставить мне тот, который быстрее и/или лучше в каком-то другим способом? Например, я бы очень хотел избежать использования отдельных.
Вау, спасибо! Коннор, я еще не читаю. ** Можете ли вы объяснить, что вы сделали? ** Еще раз спасибо! – JSLover
Это реализация q. 'q) nungroup: {$ [count x: 0!x;,/[перевернуть каждый x], сначала каждый,/[x]; x]} ' –
@Connor Gervin: ваше решение дает неправильные результаты, например. 'x: ([] a: 1 1 2 3 4; b: 3 4 5 6 100)' –