2011-07-17 6 views
12

Quels sont les moyens de Q pour utiliser les résultats d'une requête imbriquée dans une clause where?Q (kdb): imbriqué où requête

Je cherche quelque chose de similaire à SQL statement.

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

Répondre

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

Votre requête a été presque correct en dehors de ce que vous passer à la dans prédicat et utiliser la fonction comme pour l'égalité des cordes. Vous passez une table quand elle n'accepte qu'une liste. Pour envoyer la requête sous forme de liste, j'utilise exec qui fait le travail.

6

tout c'est la réponse directe à votre question, la meilleure façon le faire est sans doute les clés étrangères:

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

Une autre façon de le faire:

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