select toTypeName(key), toTypeName(value) from (
    select 1 as key, '' as value
    union all
    select toUInt64(2) as key, toNullable('') as value
);

select toTypeName(key), toTypeName(value) from (
    select toDecimal64(2, 8) as key, toNullable('') as value
    union all
    select toDecimal32(2, 4) as key, toFixedString('', 1) as value
);

select * from (
    select 'v1' as c1, null as c2
    union all
    select 'v2' as c1, '' as c2
) ALL FULL JOIN (
    select 'v1' as c1, 'w1' as c2
) using c1,c2;

select key, s1.value, s2.value
from (
    select 'key1' as key, 'value1' as value
) s1
all left join (
    select 'key1' as key, '' as value
    union all
    select 'key2' as key, toNullable('') as value
) s2
using key;
