我想在 KDB+/Q 中运行一个传统的 SQL 风格的左连接。
table 。
每一个,不仅仅是第一场比赛
测试数据
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
谁能给我提供一个在某些方面更快和/或更好的
另一种方式?例如,我真的很想避免使用 distinct 。
最佳答案
基于@Ryan 的回答。
k)nungroup:{$[#x:0!x;(,/){$[#t:+:x;t;enlist *:'[x];t]}'[x]]}
q)nungroup:{$[count x:0!x;(,/){$[count t:flip x;t;enlist first'[x]]}'[x];x]}
q)nungroup x lj ` \`a xgroup y
a b c
-----
1 3 7
1 4 7
2 5 8
2 5 9
3 6
关于join - 如何在 kdb 中执行有效的左连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39626795/