Kdb 问:仅在空行上左连接
Kdb Q: Left join only on null rows
我想在 id2
列上的两个表 t1
和 t2
之间执行左连接,仅当 id2
在 t1
上为空时边.
作为一个 qbie,我想知道它是否存在比下面我的更好的解决方案?
t1: ([] id1:`AAA`BBB`CCC`DDD`EEE; id2:```02C``E25)
t2: ([] id1:`AAA`BBB`CCC`DDD`SSS; id2:`02A`02B`C2C`DD0`SPE)
预期结果:
([] id1:`AAA`BBB`CCC`DDD`EEE; id2:`02A`02B`02C`DD0`E25)
id1 id2
-------
AAA 02A
BBB 02B
CCC 02C
DDD DD0
EEE E25
到目前为止,我的解决方案是通过将列 id2
从 t2
更改为 id3
来执行左连接,然后应用向量条件函数 ?
:
t1:t1 lj 1!select id1, id3:id2 from t2
t1[`id2]: ?[null t1[`id2];t1[`id3];t1[`id2]]
t1:delete id3 from t1
谢谢!
键下方的一个衬里 table t2 然后通过将 t1 的 id1 列的 table 传递给 table 并选择 id2 值来索引该 table 。
然后执行 fill(^) 以仅在 t1 的 id2 为 null 时取此值。
q)t1: ([] id1:`AAA`BBB`CCC`DDD`EEE; id2:```02C``E25)
q)t2: ([] id1:`AAA`BBB`CCC`DDD`SSS; id2:`02A`02B`C2C`DD0`SPE)
q)update (1!t2)[([]id1);`id2]^id2 from t1
id1 id2
-------
AAA 02A
BBB 02B
CCC 02C
DDD DD0
EEE E25
您可以简单地从 t2 中过滤掉 t1 中为空的符号的行,然后在这个新 table 上进行左连接。如果您的 table 有许多要加入的列,这也很有用。
q) t1 lj 1! select from t2 where id1 in exec id1 from t1 where id2=`
另一种使用填充的方法^
:
q){key[x]#y^x}[1!t1;1!t2]
id1| id2
---| ---
AAA| 02A
BBB| 02B
CCC| 02C
DDD| DD0
EEE| E25
我想在 id2
列上的两个表 t1
和 t2
之间执行左连接,仅当 id2
在 t1
上为空时边.
作为一个 qbie,我想知道它是否存在比下面我的更好的解决方案?
t1: ([] id1:`AAA`BBB`CCC`DDD`EEE; id2:```02C``E25)
t2: ([] id1:`AAA`BBB`CCC`DDD`SSS; id2:`02A`02B`C2C`DD0`SPE)
预期结果:
([] id1:`AAA`BBB`CCC`DDD`EEE; id2:`02A`02B`02C`DD0`E25)
id1 id2
-------
AAA 02A
BBB 02B
CCC 02C
DDD DD0
EEE E25
到目前为止,我的解决方案是通过将列 id2
从 t2
更改为 id3
来执行左连接,然后应用向量条件函数 ?
:
t1:t1 lj 1!select id1, id3:id2 from t2
t1[`id2]: ?[null t1[`id2];t1[`id3];t1[`id2]]
t1:delete id3 from t1
谢谢!
键下方的一个衬里 table t2 然后通过将 t1 的 id1 列的 table 传递给 table 并选择 id2 值来索引该 table 。 然后执行 fill(^) 以仅在 t1 的 id2 为 null 时取此值。
q)t1: ([] id1:`AAA`BBB`CCC`DDD`EEE; id2:```02C``E25)
q)t2: ([] id1:`AAA`BBB`CCC`DDD`SSS; id2:`02A`02B`C2C`DD0`SPE)
q)update (1!t2)[([]id1);`id2]^id2 from t1
id1 id2
-------
AAA 02A
BBB 02B
CCC 02C
DDD DD0
EEE E25
您可以简单地从 t2 中过滤掉 t1 中为空的符号的行,然后在这个新 table 上进行左连接。如果您的 table 有许多要加入的列,这也很有用。
q) t1 lj 1! select from t2 where id1 in exec id1 from t1 where id2=`
另一种使用填充的方法^
:
q){key[x]#y^x}[1!t1;1!t2]
id1| id2
---| ---
AAA| 02A
BBB| 02B
CCC| 02C
DDD| DD0
EEE| E25