create database test
create table test.A (id UInt8, data String) engine MergeTree() order by (id)
create table test.B (id UInt8, data String) engine MergeTree() order by (id)
insert into test.A values (0,'a'),(1,'b'),(2,'c')
insert into test.B values (1,'x'),(2,'y'),(3,'z')
Run Code Online (Sandbox Code Playgroud)
select *, isNull(a.id), isNull(b.id) from test.A a full join test.B b on a.id = b.id
如何判断0是0还是0是Null?
问题在于如何处理外连接。根据文档,这使用了一个设置join_use_nulls
:
\n\n设置 JOIN 行为的类型。合并表格时,可能会出现空单元格。ClickHouse 根据此设置以不同的方式填充它们。
\n可能的值:
\n0 \xe2\x80\x94 空单元格将填充相应字段类型的默认值。\n1 \xe2\x80\x94 JOIN 的行为方式与标准 SQL 中的行为方式相同。相应字段的类型转换为 Nullable,空单元格用 NULL 填充。
\n默认值:0。
\n
换句话说,默认方法是不符合 SQL 的。就我个人而言,我认为这种默认设置没有任何用处。NULL
我猜想Clickhouse对价值观有强烈的厌恶。
因此,您可以检查a.id = b.id
是否存在匹配项。
归档时间: |
|
查看次数: |
3440 次 |
最近记录: |