KDB+ 合并多个更新语句

KDB+ Merging multiple update statements

q)d:([] f1:`a`b` ;f2:```c; m1:`x``z;m2:``y`z)

f1 f2 m1 m2
-----------
a     x    
b        y 
   c  z  z 

如果 f1m1nulls;实际上我想将这两个查询合并到一个更新语句中:

update f1:f2 from d where null f1
update m1:m2 from d where null m1`

您可以使用三元向量条件求值?

?[vb;exprtrue;exprfalse]

新查询将是:

q)update f1:?[null f1;f2;f1] , m1:?[null m1;m2;m1] from d
f1 f2 m1 m2
-----------
a     x    
b     y  y 
c  c  z  z 

您可能想考虑的替代方法是 fill^,它允许您用另一个列表中的项目填充一个列表中的空值(在这种情况下,列表是 table) 例如

q)d:([] f1:`a`b` ;f2:```c; m1:`x``z;m2:``y`z)
q)update f2^f1,m2^m1 from d
f1 f2 m1 m2
-----------
a     x
b     y  y
c  c  z  z

填充可用于更新空值: 如果你想就地更新 table d,那么你可以使用:
update f2^f1,m2^m1 from`d

![`d;();0b;`f1`m1!((^;`f2;`f1);(^;`m2;`m1))]

如果你想显示更新的输出而不更新原来的table,那么:
update f2^f1,m2^m1 from d

![d;();0b;`f1`m1!((^;`f2;`f1);(^;`m2;`m1))]