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
如果 f1
和 m1
有 nulls
;实际上我想将这两个查询合并到一个更新语句中:
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))]
q)d:([] f1:`a`b` ;f2:```c; m1:`x``z;m2:``y`z)
f1 f2 m1 m2
-----------
a x
b y
c z z
如果 f1
和 m1
有 nulls
;实际上我想将这两个查询合并到一个更新语句中:
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))]