2017-07-25 2 views
0
t:([] col1:`aa`bb`cc;col2:`aaa`bbb`ccc); 
field1:`col1; 
field2:`col2; 
v1:`aa; 
v2:`aaaa; 

Je veux même résultat par la mise à jour fonctionnellevaleur unique de mise à jour fonctionnelle q/KDB +

update col2:`aaaa from t where col1=`aa; 

J'ai essayé

![t;enlist (=;field1;enlist v1);0b;(enlist field2)!(enlist v2)]; 

mais il me donne une erreur 'aaaa

apprécient si quelqu'un peut aider.

Répondre

3
![t;enlist (=;field1;enlist v1);0b;(enlist field2)!(enlist enlist v2)] 
+0

Si vous voulez la couverture de toutes les formes fonctionnelles: http://www.timestored.com/kdb-guides/functional-queries-dynamic-sql#functional-update –

+0

merci beaucoup! Ça marche bien – ywu

1

Vous pouvez utiliser la fonction parse pour convertir l'expression de mise à jour à un arbre d'analyse syntaxique à partir duquel vous pouvez facilement lire sur les arguments appropriés pour la mise à jour fonctionnelle.

q)parse"update col2:`aaaa from t where col1=`aa" 
! 
`t 
,,(=;`col1;,`aa) 
0b 
(,`col2)!,,`aaaa 

Rappelons que unaire , est enlist, de sorte que la forme fonctionnelle de votre requête serait

![t;enlist(=;`col1;enlist `aa);0b;(enlist `col2)!enlist enlist `aaaa] 

ou, en utilisant les noms de variables,

![t;enlist(=;field1;enlist v1);0b;(enlist field2)!(enlist enlist v2)] 
0

Ce n'est pas sous forme de mise à jour fonctionnelle, mais voici une autre façon de mettre à jour votre table

@[t; where t[`col1] =`aa; :; enlist[`col1]!enlist[`aaaa]]