ClickHouse关联查询中如何排除重复列?
解决ClickHouse左连接后冗余字段重复的问题
直接用ClickHouse的EXCEPT列排除语法就能搞定,不用手动罗列所有字段,两种实用写法供你选择:
写法一:直接在SELECT中排除指定表的冗余列
SELECT table1.*, table2.* EXCEPT (pid, timestamp) FROM table1 LEFT JOIN table2 ON table1.timestamp = table2.timestamp
这个写法会保留table1的所有字段,同时只取table2中除pid和timestamp之外的所有字段——关联逻辑依然依赖timestamp,完全不受影响。
写法二:先过滤table2的冗余字段再连接
如果觉得写法一不够直观,也可以先通过子查询剔除table2的冗余字段,再执行左连接:
SELECT table1.*, t2.* FROM table1 LEFT JOIN ( SELECT * EXCEPT (pid, timestamp) FROM table2 ) AS t2 ON table1.timestamp = t2.timestamp
补充说明
- 确保你的ClickHouse版本支持
EXCEPT列语法(20.12及以上版本均支持,目前主流版本无问题); - 若
table2中还有其他与table1重名的字段,可给这些字段加别名(比如table2.some_col AS table2_some_col),避免结果集列名冲突。
内容的提问来源于stack exchange,提问作者Zyzim91
相关产品推荐
相关产品推荐

