2011-07-17 2 views
12

Каковы способы использования в Q для использования результатов вложенного запроса в предложении where?Q (kdb): inested where query

Я ищу что-то похожее на SQL заявление.

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

ответ

8
select from food where type_id in (exec type_id from types where type_name like "fruit") 

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

6

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

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) 
4

Другой способ сделать это:

select from food where type_id in (select type_id from types where type_name like "fruit")[`type_id] 
Смежные вопросы