如何将列表的每个元素与另一个列表的每个元素左连接

mar*_*ari 1 kdb

我有2个列表,每个列表包含50个表。每个列表中的每个表都有一个称为ID... 的列。

count list1
50
count list2
50
Run Code Online (Sandbox Code Playgroud)

我希望能够在列表中的每个表上执行左联接到第二个列表中的每个表(使用ID列作为键列),然后将每个联接的结果保存在每个联接的单独变量中。

通过执行以下操作,我可以分别对每个表执行左联接(以索引27的表为例)。这样就为表的第27个索引提供了所需的结果...

table27:list1[27] lj `ID xkey list2[27]
Run Code Online (Sandbox Code Playgroud)

在下一组表执行相同操作之前,如何遍历表列表,将每个表按其各自的索引连接并将该连接的表存储到变量中?

到目前为止,我已经尝试了以下方法来加入表格...

joinedLists:each list1 lj `ID xkey each list2
joinedLists:(each list1) lj `ID xkey each list2
joinedLists:(each list1) lj' `ID xkey each list2
joinedLists:lj/[(each list1;each list2)]
joinedLists:lj/'[(each list1;each list2)]
joinedLists:list1[1+til 51] lj `ID xkey list2[1+til 51]
Run Code Online (Sandbox Code Playgroud)

尽管上述所有查询(最后一个查询除外)都会导致错误的错误消息'。我尝试的最后一个查询给出了结果,但是在进一步检查该列表中的表时,它缺少一列并且计数不是预期的...

count each list1
913930 799359 53212 20 70 6 116 8 139 16 74 28 3 69 11 137 6 22 42 123 5 23 16 1 13 26 26 9 93 11 2 1 2 2 14 2 1 15 3 11 25 7 4 3 1 2 6 9 1 2 1
count each list2
274506 440675 44935 20 70 6 101 6 138 15 71 27 3 63 10 133 6 21 42 123 3 16 11 1 12 25 26 13 92 10 2 1 2 2 14 2 1 15 3 11 25 7 4 3 1 2 6 30 1 2 1
count each joinedLists
799410 53263 71 121 57 167 59 190 67 125 79 54 120 62 188 57 73 93 174 56 74 67 52 64 77 77 60 144 62 53 52 53 53 65 53 52 66 54 62 76 58 55 54 52 53 57 60 52 53 52 51
Run Code Online (Sandbox Code Playgroud)

小智 5

下面的示例在每个列表中都有两个表:

q)list1:(([]ID:1 2 3;b:4 5 6);([]ID:6 7 8;b:9 10 11))
q)list2:(([]ID:1 2 3;b:14 15 16);([]ID:6 7 8;b:19 20 21))
q){[t1;t2] list3,:enlist t1 lj `ID xkey t2}'[list1;list2];
q)list3
+`ID`b!(1 2 3;14 15 16)
+`ID`b!(6 7 8;19 20 21)
Run Code Online (Sandbox Code Playgroud)

两者(')都用于逐项将函数应用于两个列表。

,:用于全局加入每个应征结果并分配给变量list3