【问题标题】:KDB+ Merging multiple update statementsKDB+合并多个更新语句
【发布时间】:2018-04-10 22:33:05
【问题描述】:
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,我想将f1m1 列分别更新为f2m2;实际上我想将这两个查询合并到一个更新语句中:

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

【问题讨论】:

    标签: kdb


    【解决方案1】:

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

    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
    

    【讨论】:

    • 好一个乔恩。小修正 - 'update f2^f1,m2^m1 from d'
    【解决方案2】:

    您可以使用三元向量条件评估 ?

    ?[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 
    

    【讨论】:

      【解决方案3】:

      Fill 可用于更新空值: 如果您想就地更新表 d,则可以使用:
      update f2^f1,m2^m1 from`d

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

      如果你想在不更新原始表的情况下显示更新的输出,那么:
      update f2^f1,m2^m1 from d

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-23
        • 2019-10-16
        • 2020-01-28
        • 1970-01-01
        相关资源
        最近更新 更多