KDB+自连接查询:筛选t=A与其他t的无重复共同值
A MT
A RX
B SD
B RX
A RX
C SD
### 需求 通过自连接筛选出`t=A`与其他`t`的共同`value`,结果需去重,期望输出:
t value
A RX
B RX
### 自连接实现方案 可以通过自连接关联表,先定位A和其他t共享的value,再筛选对应记录并去重: #### 写法一:子查询定位共同值后筛选 ```sql SELECT DISTINCT t, value FROM your_table WHERE value IN ( SELECT a.value FROM your_table a JOIN your_table b ON a.value = b.value WHERE a.t = 'A' AND b.t != 'A' ) AND t IN ('A', (SELECT DISTINCT b.t FROM your_table a JOIN your_table b ON a.value = b.value WHERE a.t='A' AND b.t!='A')) ORDER BY t;
写法二:自连接匹配后合并结果
SELECT DISTINCT a.t, a.value FROM your_table a JOIN your_table b ON a.value = b.value WHERE a.t = 'A' AND b.t != 'A' UNION SELECT DISTINCT b.t, b.value FROM your_table a JOIN your_table b ON a.value = b.value WHERE a.t = 'A' AND b.t != 'A';
两种写法核心逻辑一致:先通过自连接找到A和其他t共有的value,再提取对应t的记录并去重,最终得到符合要求的结果。
内容的提问来源于stack exchange,提问作者Shadowpulse
相关产品推荐
相关产品推荐

