Q语言中lj与ljf的区别咨询及文档相关疑问
Q语言中
lj与ljf的区别 嘿,我来帮你理清这两个函数的差异~首先得说,ljf确实不在官方核心文档里,它属于Q里比较实用的“小众”工具函数,很多时候是作为lj的补充存在的。
核心区别主要体现在左表行在右表无匹配时的填充规则:
1. lj(标准左连接)
这是官方文档里的标准左连接函数,行为很明确:以左表的键为基准,保留左表所有行;当左表某行在右表中找不到对应键的匹配时,右表对应的列会被填充为Q语言的空值(比如数值类型是0N,字符串是"",符号是`这类,根据列类型而定)。
举个实际例子:
// 左表 left: ([] userid: 1 2 3; username: `Alice`Bob`Charlie) // 右表(只有userid=1和3的记录) right: ([] userid: 1 3; score: 85 92) // 用lj连接 left lj `userid xkey right
运行后得到的结果里,userid=2的那行,score列会是0N(空数值)——因为右表里没有这个userid的匹配项。
2. ljf(左连接填充)
ljf是lj的变种,核心就是解决lj产生空值的问题。当左表行在右表无匹配时,它不会留空,而是用右表对应列的最后一个非空值来填充;如果右表只有一行数据,就直接用这行的值填充所有无匹配的左表行。
还是用上面的例子测试:
// 用ljf连接 left ljf `userid xkey right
这次userid=2的那行,score列会被填充为右表score列的最后一个值92。如果我们把右表改成只有一行默认值:
right_default: ([] score: 60) left ljf right_default
那么所有左表行的score列都会被填充为60,这在需要给无匹配项统一设默认值时特别方便。
简单总结:
lj:无匹配时右表列留空(null)ljf:无匹配时自动用右表对应列的填充值补全
内容的提问来源于stack exchange,提问作者kgf3JfUtW
相关产品推荐
相关产品推荐

