KDB/q如何基于两列执行左连接操作
在KDB/q中基于多列执行左连接的解决方案
核心实现代码
先构造示例表(用于验证逻辑):
WORKING_TABLE: ([] Store: `AXA`DEP`ZOO`REP; ID: `2B`2B`2B`3C; Cost: 2.3 2.8 5.0 8.7; Date: 2023.01.01 2023.01.01 2023.01.02 2023.04.04) INFO_TABLE: ([] ID: `2B`2B`3C; Tax: 0.5 0.9 1.0; Date: 2023.01.01 2023.01.02 2023.04.04)
执行基于ID和Date的左连接:
result: WORKING_TABLE lj[`ID`Date; INFO_TABLE]
代码说明
lj是q的左连接函数,会完整保留左表(WORKING_TABLE)的所有行,仅匹配右表(INFO_TABLE)中ID和Date完全一致的记录,将右表的Tax列追加到左表。- 若右表与左表的连接键列顺序不同,可先用
xcol调整顺序(本例中顺序一致,可省略):result: WORKING_TABLE lj `ID`Date xcol INFO_TABLE
执行结果
运行代码后,result将生成目标表:
| Store | ID | Cost | Date | Tax |
|---|---|---|---|---|
| AXA | 2B | 2.3 | 2023.01.01 | 0.5 |
| DEP | 2B | 2.8 | 2023.01.01 | 0.5 |
| ZOO | 2B | 5.0 | 2023.01.02 | 0.9 |
| REP | 3C | 8.7 | 2023.04.04 | 1.0 |
补充说明
- 若左表某行在右表中无匹配的
ID+Date组合,Tax列会填充空值0N; - 若右表存在同一
ID+Date组合的多条记录,左连接会将左表匹配行与这些记录分别组合,生成多行结果。
内容的提问来源于stack exchange,提问作者mmv456
相关产品推荐
相关产品推荐

