我有一个名为'A'的列表:
cont
"aa"
"bb"
"cc"
我有一个名为'run'的表,其中包含列
first second third
sad random "aa"
happy random1 "dd"
我必须从'run'中选择那些行,其中第三列包含列表A中的元素。我对kdb很新,并且对如何执行此操作的任何帮助表示赞赏。感谢
答案 0 :(得分:2)
您需要使用关键字in
,以便检查一个列表中的值是否显示在另一个列表中:
q)show A:("aa";"bb";"cc")
"aa"
"bb"
"cc"
q)show run:([]f:("sad";"happy");s:("random";"random1");t:("aa";"dd"))
f s t
----------------------
"sad" "random" "aa"
"happy" "random1" "dd"
q)select from run where t in A
f s t
-------------------
"sad" "random" "aa"
如果A
是未加密的表格,那么您可以使用cont
将列A`cont
拉出来:
q)show A:([]cont:("aa";"bb";"cc"))
cont
----
"aa"
"bb"
"cc"
q)select from run where t in A`cont
f s t
-------------------
"sad" "random" "aa"
当使用in
时,输出是一个布尔列表,其数量与左边的参数相等(在这种情况下为1 2 3
):
q)1 2 3 in 2 4 6
010b
使用where
语句中的select
子句过滤返回的行。将where
应用于布尔列表仅返回其为真的索引:
q)where 1 2 3 in 2 4 6
,1
通过扩展,只会从表中返回这些索引。
还应该注意,即使您提供的表只是一个示例,它也包含关键字first
作为列标题。如果可能,应避免使用标题作为标题,因为它们会导致意外行为。