Select 部分匹配来自 KDB 中两个不同 table 的行?

Select partialy matching rows from two differernt table in 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

谢谢

我假设这里唯一的逻辑是 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

所以现在我们可以做一个 uj or lj - 你应该在参考页面上查找这些内容。只是为了在这种情况下使用 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 的代码和代码随时间变化。

如果没有关于如何拆分符号以进行精确匹配的分界,您可能需要使用 like 进行搜索:

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

虽然这不是一个理想的解决方案,但应该通过理解数据和拆分符号来使用接受的答案中描述的连接来避免。