在 ClickHouse 中使用 between 条件连接表

Posted

技术标签:

【中文标题】在 ClickHouse 中使用 between 条件连接表【英文标题】:Join tables in ClickHouse with between condition 【发布时间】:2021-04-27 14:57:14 【问题描述】:

我发现 ClickHouse 中的 join 只支持相等的表达式。 但我需要在 ClickHouse 中加入两个具有“介于”条件的大表。

如何实现这个逻辑?

select a.*, b.name
from a
join b
  on a.id = b.id
  and a.start_dt between b.start_dt and b.end_dt;

出错了

代码:403,e.displayText() = DB::Exception:JOIN ON 的表达式无效。预期等于表达式...

【问题讨论】:

为 between 条件尝试 WHERE 子句。或者使用 ">= 和 【参考方案1】:

试试这个:

select a.*, b_name
from (
  select a.*, b.name AS b_name, b.start_dt AS b_start_dt, b.end_dt AS b_end_dt
  from a join b using id
  where a.start_dt between b_start_dt and b_end_dt
  )

查看Clickhouse join with condition 中的一些 JOIN 细节。

【讨论】:

以上是关于在 ClickHouse 中使用 between 条件连接表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Travis 中使用 Clickhouse

如何在 clickhouse 中使用 groupBitmapAnd 和 AggregatingMergeTree 引擎?

在 ClickHouse 中使用原始字符串

如何使用golang在clickhouse中使用一个命令插入csv文件

如何在 ClickHouse 中使用分隔符连接 INT

如何在 Elixir Ecto 中使用“between”创建 SQL