2014-10-10 134 views
1

愚蠢的kdb問題。我想根據t2中的哪些鍵與t1中的列匹配來從t1中選擇行。在下面的示例中,t1中出現在t2中的唯一date sym組合框是d1 s3和d3 s4。因此,我的結果表t3應該只有這兩行。KDB選擇在第二個表中具有匹配鍵的一個表的行

t1:([]date:`d1`d2`d3`d3;sym:`s1`s2`s3`s4;price:100 200 300 400) 
date sym price 
d1 s1 100 
d2 s2 200 
d3 s3 300 
d3 s4 400 


t2:2!([]date:`d1`d3`d3`d4;sym:`s1`s2`s4`s9;var1:`Blah`Blah`Blah`Blah;var2:`Blah`Blah`Blah`Blah) 
    date sym | var1 var2 
    d1 s1 Blah Blah 
    d3 s2 Blah Blah 
    d3 s4 Blah Blah 
    d4 s9 Blah Blah 


t3:([]date:`d1`d3;sym:`s1`s4;price:100 400) 
date sym price 
d1 s1 100 
d3 s4 400 

一個這樣做的愚蠢的辦法是

delete var1,var2,... from t1 ij t2 

是否有不介入不必手動刪除T2的所有非鍵列一個更清潔的方式?

回答

0

一種選擇是

q)select from t1 where ([] date;sym) in key t2 
date sym price 
-------------- 
d1 s1 100 
d3 s4 400 
0

的情況下,另一種方法你T2是由很多列的方向性的,你不喜歡打字出來

t1 where (keys[t2]#t1) in key t2 
相關問題