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

ich gleiches Ergebnis will durch funktionelle Update alsFunktions Update Einzelwert in q/kdb +

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

versuchte ich

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

aber es gibt mir einen Fehler 'aaaa

schätzen wenn jemand helfen kann.

Antwort

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

Wenn Sie alle funktionalen Formen abdecken möchten: http://www.timestored.com/kdb-guides/functional-queries-dynamic-sql#functional-update –

+0

vielen Dank! Es läuft gut – ywu

1

können Sie die parse Funktion verwenden, um den Update-Ausdruck in einen Parse-Baum zu konvertieren, von dem Sie leicht die richtigen Argumente für die Funktions Update ablesen können.

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

Daran erinnern, dass einstellige ,enlist ist, so dass die funktionale Form der Anfrage würde

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

oder unter Verwendung von Variablennamen,

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

Es ist nicht in der funktionalen Update Form sein, Aber hier ist eine andere Möglichkeit, wie Sie Ihre Tabelle

aktualisieren können