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
虽然这不是一个理想的解决方案,但应该通过理解数据和拆分符号来使用接受的答案中描述的连接来避免。
假设我有以下两个表
表 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
虽然这不是一个理想的解决方案,但应该通过理解数据和拆分符号来使用接受的答案中描述的连接来避免。