我有这两张桌子。
tab1:([]col1:`abc`def`ghi;col2:2 4 6);
tab2:([]col1:`def`ghi`ghi`rrr;col3:5 10 11 15);
我希望将所有内容保留在正确的表中,但重复col1以匹配tab2中的col1。我找到的最接近的是ij
tab2 ij 1! tab1
col1 col3 col2
--------------
def 5 4
ghi 10 6
ghi 11 6
但是,我想产生这样的结果:
col1 col3 col2
--------------
abc 2
def 5 4
ghi 10 6
ghi 11 6
如果tab2中的col1中还有其他值,我不想把它放到结果表中:就像我不想在那里使用`rrr。
答案 0 :(得分:1)
这可以为您提供您正在寻找的内容:
q){x,flip y}/[tab1 lj `col1 xgroup tab2]
col1 col2 col3
------------------
abc 2 `long$()
def 4 5
ghi 6 10
ghi 6 11
没有经过严格测试,但它是一个起点!
编辑:实际上,它比这更微妙。当col3中出现空白列表时,翻转将导致问题,上面的示例恰好可以避免这种情况。你可能需要这样的东西来捕获边缘情况:
q){x,$[0=count f:flip y;enlist first each y;f]}/[();tab1 lj `col1 xgroup tab2]
col1 col2 col3
--------------
abc 2
def 4 5
ghi 6 10
ghi 6 11
答案 1 :(得分:0)
这个怎么样?
q)uj[select from tab1 where not col1 in exec col1 from tab2;tab2 ij 1!tab1]
col1 col2 col3
--------------
abc 2
def 4 5
ghi 6 10
ghi 6 11
此处我们将联合应用于a)tab1
中tab2
不存在的所有内容和b tab1
和 {中存在的所有内容{1}}。
我们不确定是否可以调用此完全外部右连接,因为我们不希望在tab2中包含所有记录(在本例中为tab2
)但是这是一个术语问题。