Q (kdb): вложенный, где запрос - PullRequest
11 голосов
/ 17 июля 2011

Как можно в Q использовать результаты вложенного запроса в предложении where?

Я ищу что-то похожее на оператор SQL.

select from food where type_id in (
    select type_id from types where type_name = "fruit"
)

Ответы [ 3 ]

7 голосов
/ 11 августа 2011
select from food where type_id in (exec type_id from types where type_name like "fruit")

Ваш запрос был почти верным, кроме того, что вы передали предикату в и использовали функцию like для равенства строк.Вы передаете таблицу, когда она принимает только список.Чтобы отправить запрос в виде списка, я использую exec , который выполняет эту работу.

6 голосов
/ 23 марта 2012

, хотя это прямой ответ на ваш вопрос, лучший способ сделать это, вероятно, внешние ключи:

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)
3 голосов
/ 20 июля 2017

Еще один способ сделать это:

select from food where type_id in (select type_id from types where type_name like "fruit")[`type_id]
...