k1:([a:("ff"; "yy"; "zz");z:("tt"; "yy"; "hh")] b:("33"; "44"; "55"); c:("66"; "77"; "88"))


k2:([z:()] a:(); b:(); c:(); m:(); i:())

k1 и k2 - это таблицы с ключами. k2 содержит все столбцы от k1 и других.

Как выполнить условное обновление с k1 на k2. В принципе, каково соответствующее рабочее утверждение приведенного ниже:

`k2 upsert select k1 where a="ff"
kdb
2
pom 23 Окт 2018 в 17:44

2 ответа

Лучший ответ

Я думаю, что это решит вашу проблему:

k2 uj `z xkey select from k1 where a like "ff"

Xkey будет поддерживать ключ на k2, в то время как uj будет поддерживать все столбцы, включая те, которые не имеют значений в k1.

В этом примере это вернет:

z   | a    b    c    m i
----| ------------------
"tt"| "ff" "33" "66"
7
Joe Griffiths 23 Окт 2018 в 15:03

Ваша попытка утверждения на самом деле очень близка. Ты можешь использовать:

`k2 upsert 0!select from k1 where a like "ff"
2
emc211 23 Окт 2018 в 15:07
52951890