【发布时间】:2019-11-06 04:02:24
【问题描述】:
不能在 ON 子句中使用比较运算符?
[如何重现]
- ClickHouse 服务器版本:v19.11.0
- 两个表的示例
表1
CREATE TABLE table1
(
str1 String,
num1 UInt64
) ENGINE=MergeTree()
ORDER BY (str1);
表2
CREATE TABLE table2
(
str2 String,
num2 UInt64
) ENGINE=MergeTree()
ORDER BY (str2);
查询
SELECT
*
FROM
table1 AS t1
LEFT OUTER JOIN
table2 AS t2
ON
t1.str1 = t2.str2
AND greater(t1.num1, t2.num2) = 1;
错误信息
DB::Exception: Invalid columns in JOIN ON section. Columns num1 and num2 are from different tables..
没有AND greater(t1.num1, t2.num2) = 1,查询成功。
【问题讨论】:
-
我认为问题在于
greater()函数不支持该功能。您可能会在 clickhouse 存储库中打开错误报告/FR -
我将问题添加为功能请求。github.com/yandex/ClickHouse/issues/5736
-
以防万一,显然,您可以将条件移至
WHERE子句,如SELECT * FROM table1 AS t1 LEFT JOIN table2 AS t2 ON t1.str1 = t2.str2 WHERE t1.num1 > t2.num2,只需注意null处理即可。 -
只需删除更大(...)后面的
= 1。那应该行得通。但这与使用>符号基本相同。a > b在内部被 clickhouse 解析为greater(a, b)。
标签: clickhouse