#kdb
Вопрос:
Мне нужно обновить столбец списком, в котором есть только один символ. Ниже один не работает. Обратите внимание, что город-это столбец, в котором содержится список символов.
update city: enlist `Lodnon from `user where id in (1,2,3);
Ответ №1:
Ваш текущий запрос очень близок. Вы хотите предоставить атом (т. Е. `london
), а не список:
update city:`london from user where id in 1 2 3
Предложенный вами запрос завершится ошибкой длины (вы предоставляете список с 1 элементом для замены 3 записей столбца, предполагая, что в 1 2 3 есть 3 записи с идентификатором).
Изменить: Чтобы включить фактические значения столбцов, вам нужно будет убедиться, что city
столбец принимает списки (т. Е. Применение ключевого meta
слова к вашей таблице должно возвращать заглавные буквы в t
столбце для city
.
Предполагая , что ваш city
столбец в настоящее время имеет небольшой s
размер при запуске meta user
, вы можете обновить его, запустив:
update city:enlist each city from `user
Затем следующее внесет желаемые вами изменения:
update city:city::enlist`london from user where id in 1 2 3
Комментарии:
1. Это работает, но значение «лондон» не входит в список. Я должен посмотреть, как включить Лондон в базу данных.
2. Ах, я вижу-отредактировал вышеизложенное для того, чтобы значения столбцов города были в виде списков ^
Ответ №2:
Если вы хотите, чтобы он оставался списком, вы можете сделать что-то вроде
{update city:(x)#enlist `london from `user where id in 1 2 3}count select from t where id in 1 2 3
Или, чтобы привести это в порядок, вы могли бы использовать
update city:count[i]#enlist `London from t where id in 1 2 3
Как i
и в графе, длина будет такой же, как и у списка, из-за фильтрации в предложении where.
Ответ №3:
В качестве альтернативы вы можете использовать ?[boolean_list;if_true;if_false]
оператора следующим образом:
/ this is just to create a test table t:([] id:(1;2;3;4); city:4#`) / check if each element of t`id is in (1;2;3) / 1) `London if true, ` if false / 2) assign t[`city] t[`city]:?[in[t`id;(1;2;3)];`London;`]
Ответ №4:
Я смог сделать это со следующим.
update city: 3#enlist enlist `Lodnon from `user where id in (1,2,3);
Комментарии:
1. Ваш ответ можно улучшить, добавив дополнительную информацию о том, что делает ваш код и как он помогает оператору.