如何在 KDB 查询中进行自连接?

How do you do a self join in a KDB query?

是否可以在 KDB 中执行以下操作:

(给你相当于 SQL)

select column1 
  from table1 alias1
    join table1 alias2
  where alias1.column2 = alias2.column2

是的,例如:

q)t:([]k: 1 2 1; v:`A`B`C)
q)ej[`k;t;t]
k v
---
1 A
1 C
2 B
1 A
1 C

更新:您可以根据需要过滤结果:

q)select from ej[`k;t;t] where (v=`A) or k=2
k v
---
1 A
2 B
1 A

更新 2: 如果您只需要找到重复项,则根本不需要自行加入 table:

q)t:([]k: 1 2 3 4 5; v:`A`B`A`C`C)
q)select from t where 1<(count;v)fby v
k v
---
1 A
3 A
4 C
5 C

对于第二个问题(不会让我评论,所以在这里添加),你可以做如下的事情

t:([]k: 1 2 3 4 5; v:`A`B`A`C`C) 

select from t where v in (exec v from (select count i by v from t) where x>1)

ungroup select from (`v xgroup t) where (count each k)>1