2011-07-17 13 views
12

¿Cuáles son las formas en que Q utiliza los resultados de una consulta anidada en una cláusula where?Q (kdb): anidado donde consulta

Estoy buscando algo similar a SQL declaración.

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

Respuesta

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

Su consulta era casi correcta, aparte de lo que pasa a la en predicado y utilizar la función como para la igualdad de cadenas. Está pasando una tabla cuando solo acepta una lista. Para enviar la consulta como una lista, uso exec, que hace el trabajo.

6

mientras que esa es la respuesta directa a su pregunta, la mejor manera de hacerlo es probable que las claves externas:

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

Otra forma de hacerlo:

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