从KDB中的两个不同表中选择部分匹配的行?

时间:2016-08-18 04:10:48

标签: kdb

假设我有以下两个表

表1

symbol ric
--------------  
AAA    AATSA.AS   
AALB   AALB.AS  
AJAX   AJAX.AS  
AMG    AMG.AS 

表2

Title               Ticker
ARCELORMITTAL REG   AAA.AS  
TC EURO EQ          TEET.AS
HAL TRUST           HAL.AS 
TETRAGON FIN GROUP  TFG.AS

为了获得与Table2.Ticker部分匹配的所有Table1.symbol,我需要什么查询?

例如,在以下两个表中,我应该从 Table1.symbol 获得 AAA ,因为它与 AAA.AS 部分匹配的 Table2.Ticker

由于

2 个答案:

答案 0 :(得分:3)

我假设这里唯一的逻辑是Table2.Ticker可以被.拆分,并且可以与Table1.symbol匹配。

首先,您可以拆分Ticker:

q)update fragment:`$("." vs' string Ticker)[;0] from `Table2
`Table2
q)Table2
Title             Ticker  fragment
----------------------------------
ARCELORMITTAL REG AAA.AS  AAA
TC EURO EQ        TEET.AS TEET

虽然我可以调用fragment symbol而是将其作为单独的列进行说明。您还需要fragment列加入Table1

q)update fragment:symbol from `Table1
`Table1
q)Table1
symbol ric      fragment
------------------------
AAA    AATSA.AS AAA
AALB   AALB.AS  AALB

现在我们可以执行ujlj - 您应该在参考页面上查看这些内容。只是在这种情况下使用uj来查看整个shebang:

q)(`fragment xkey Table1) uj (`fragment xkey Table2)
fragment| symbol ric      Title             Ticker
--------| -----------------------------------------
AAA     | AAA    AATSA.AS ARCELORMITTAL REG AAA.AS
AALB    | AALB   AALB.AS
TEET    |                 TC EURO EQ        TEET.AS

在旁注...... 加入Bloomberg和RIC符号是一场噩梦:-)最终,您必须拥有连接ISINS,RIC和Bloomberg代码的表格。 RIC和代码随着时间的推移会发生变化。

答案 1 :(得分:0)

如果没有关于如何拆分符号以进行完全匹配的划分,您可能希望使用like进行搜索:

q)select from t1 where any each t2[`Ticker] like/:(string[symbol],\:"*")
symbol ric
---------------
AAA    AATSA.AS

虽然它不是理想的解决方案,但应该通过理解数据并拆分符号来避免使用连接,如接受的答案中所述。