ClickHouse中使用UNION

在 ClickHouse 中,UNION 用于合并两个或多个查询的结果集。ClickHouse 默认支持的是 UNION ALL,即合并结果集时不去重。如果需要使用 UNION DISTINCT(即合并结果集时去重),可以显式地指定。

UNION ALL

UNION ALL 不去重,直接合并结果集。

sql 复制代码
SELECT id, name FROM table1
UNION ALL
SELECT id, name FROM table2;

UNION DISTINCT

UNION DISTINCT 会对合并后的结果进行去重。

sql 复制代码
SELECT id, name FROM table1
UNION DISTINCT
SELECT id, name FROM table2;

示例表结构

假设有两个表 table1table2,它们的结构如下:

sql 复制代码
CREATE TABLE table1 (
    id UInt32,
    name String
) ENGINE = MergeTree()
ORDER BY id;

CREATE TABLE table2 (
    id UInt32,
    name String
) ENGINE = MergeTree()
ORDER BY id;

使用 UNION ALL 和 UNION DISTINCT 的示例

UNION ALL 示例

合并两个表的所有记录:

sql 复制代码
SELECT id, name FROM table1
UNION ALL
SELECT id, name FROM table2;
UNION DISTINCT 示例

合并两个表并去重:

sql 复制代码
SELECT id, name FROM table1
UNION DISTINCT
SELECT id, name FROM table2;

使用 ORDER BY 和 LIMIT

如果需要对合并后的结果进行排序或限制结果集的大小,可以在 UNION 后使用 ORDER BYLIMIT

UNION ALL 和 ORDER BY
sql 复制代码
SELECT id, name FROM table1
UNION ALL
SELECT id, name FROM table2
ORDER BY id;
UNION DISTINCT 和 LIMIT
sql 复制代码
SELECT id, name FROM table1
UNION DISTINCT
SELECT id, name FROM table2
LIMIT 10;

注意事项

  1. 列数和数据类型需要一致:每个子查询的列数和数据类型需要保持一致,否则会导致查询失败。
  2. 性能考虑UNION DISTINCT 需要对结果集去重,因此可能会比 UNION ALL 消耗更多的资源。

通过这些示例,你可以在 ClickHouse 中使用 UNION ALLUNION DISTINCT 来合并多个查询的结果集。

相关推荐
Jiutwo4 天前
ClickHouse 入门
数据库·clickhouse
neeef_se7 天前
clickhouse-介绍、安装、数据类型、sql
数据库·sql·clickhouse
昊昊该干饭了10 天前
数仓建模(五)选择数仓技术栈:Hive & ClickHouse & 其它
hive·hadoop·clickhouse
大饼酥11 天前
ClickHouse大数据准实时更新
clickhouse
柚几哥哥11 天前
从 MySQL 到 ClickHouse 的迁移与优化——支持上亿级数据量的复杂检索
数据库·mysql·clickhouse
程序员老石11 天前
ClickHouse-CPU、内存参数设置
android·java·clickhouse
程序员老石13 天前
Clickhouse基础(一)
java·开发语言·clickhouse
柚几哥哥14 天前
SpringBoot多数据源架构实现
spring boot·后端·clickhouse·架构·数据库架构
金州饿霸14 天前
ClickHouse vs StarRocks 选型对比
clickhouse
King.62414 天前
SQLynx 数据库管理平台 3.6.0 全新发布:全面支持华为数据库和ClickHouse,代码提示更智能!
大数据·数据库·人工智能·sql·mysql·clickhouse·华为