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

我想通過功能更新相同的結果功能更新單值+

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

我試圖

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

,但它給我一個錯誤'aaaa

欣賞如果有人能幫助。

回答

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

如果您想要涵蓋所有功能表單:http://www.timestored.com/kdb-guides/functional-queries-dynamic-sql#functional-update –

+0

非常感謝!它運作良好 – ywu

1

您可以使用parse函數將更新表達式轉換爲解析樹,從中您可以輕鬆讀取功能更新的正確參數。

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

回想一下,一元,enlist,使您的查詢的功能形式是

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

,或者使用變量名,

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

這不是在功能更新的形式,但這裏有另一種方式可以更新您的餐桌

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