Q (kdb): вложенный, где запрос
Какие способы в Q
использовать результаты вложенного запроса в where
статья?
Я ищу что-то похожее на SQL
заявление.
select from food where type_id in (
select type_id from types where type_name = "fruit"
)
3 ответа
Решение
select from food where type_id in (exec type_id from types where type_name like "fruit")
Ваш запрос был почти верным, за исключением того, что вы передавали предикату in и использовали функцию like для равенства строк. Вы передаете таблицу, когда она принимает только список. Чтобы отправить запрос в виде списка, я использую exec, который выполняет эту работу.
В то время как это прямой ответ на ваш вопрос, лучший способ сделать это, вероятно, внешние ключи:
q)types:([type_id:`apple`orange`cucumber]type_name:`fruit`fruit`vegetable)
q)food:([type_id:`types$`apple`orange`cucumber]price:3?2.)
q)meta food
c | t f a
-------| ---------
type_id| s types
price | f
q)select from food where type_id.type_name=`fruit
type_id| price
-------| ---------
apple | 0.4593231
orange | 1.383906
q)
Еще один способ сделать это:
select from food where type_id in (select type_id from types where type_name like "fruit")[`type_id]