mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
better test for joins with dups (add nulls)
This commit is contained in:
parent
7a4cffd49e
commit
f6d7eae0cc
@ -1,118 +1,253 @@
|
||||
inner
|
||||
1 A 1 a
|
||||
1 A 1 b
|
||||
2 B 2 c
|
||||
2 C 2 c
|
||||
3 D 3 d
|
||||
3 D 3 e
|
||||
4 E 4 f
|
||||
4 F 4 f
|
||||
9 I 9 i
|
||||
1 l1 1 1 r1 \N
|
||||
1 l1 1 1 r2 \N
|
||||
2 l2 2 2 r3 \N
|
||||
2 l3 3 2 r3 \N
|
||||
3 l4 4 3 r4 \N
|
||||
3 l4 4 3 r5 \N
|
||||
4 l5 \N 4 r6 nr6
|
||||
4 l6 \N 4 r6 nr6
|
||||
9 l9 \N 9 r9 nr9
|
||||
inner subs
|
||||
1 A 1 a
|
||||
1 A 1 b
|
||||
2 B 2 c
|
||||
2 C 2 c
|
||||
3 D 3 d
|
||||
3 D 3 e
|
||||
4 E 4 f
|
||||
4 F 4 f
|
||||
9 I 9 i
|
||||
1 l1 1 1 r1 \N
|
||||
1 l1 1 1 r2 \N
|
||||
2 l2 2 2 r3 \N
|
||||
2 l3 3 2 r3 \N
|
||||
3 l4 4 3 r4 \N
|
||||
3 l4 4 3 r5 \N
|
||||
4 l5 \N 4 r6 nr6
|
||||
4 l6 \N 4 r6 nr6
|
||||
9 l9 \N 9 r9 nr9
|
||||
inner expr
|
||||
1 A 1 a
|
||||
1 A 1 b
|
||||
2 B 2 c
|
||||
2 C 2 c
|
||||
3 D 3 d
|
||||
3 D 3 e
|
||||
4 E 4 f
|
||||
4 F 4 f
|
||||
9 I 9 i
|
||||
1 l1 1 1 r1 \N
|
||||
1 l1 1 1 r2 \N
|
||||
2 l2 2 2 r3 \N
|
||||
2 l3 3 2 r3 \N
|
||||
3 l4 4 3 r4 \N
|
||||
3 l4 4 3 r5 \N
|
||||
4 l5 \N 4 r6 nr6
|
||||
4 l6 \N 4 r6 nr6
|
||||
9 l9 \N 9 r9 nr9
|
||||
left
|
||||
1 A 1 a
|
||||
1 A 1 b
|
||||
2 B 2 c
|
||||
2 C 2 c
|
||||
3 D 3 d
|
||||
3 D 3 e
|
||||
4 E 4 f
|
||||
4 F 4 f
|
||||
5 G 0
|
||||
8 H 0
|
||||
9 I 9 i
|
||||
1 l1 1 1 r1 \N
|
||||
1 l1 1 1 r2 \N
|
||||
2 l2 2 2 r3 \N
|
||||
2 l3 3 2 r3 \N
|
||||
3 l4 4 3 r4 \N
|
||||
3 l4 4 3 r5 \N
|
||||
4 l5 \N 4 r6 nr6
|
||||
4 l6 \N 4 r6 nr6
|
||||
5 l7 \N 0 \N
|
||||
8 l8 \N 0 \N
|
||||
9 l9 \N 9 r9 nr9
|
||||
left subs
|
||||
1 A 1 a
|
||||
1 A 1 b
|
||||
2 B 2 c
|
||||
2 C 2 c
|
||||
3 D 3 d
|
||||
3 D 3 e
|
||||
4 E 4 f
|
||||
4 F 4 f
|
||||
5 G 0
|
||||
8 H 0
|
||||
9 I 9 i
|
||||
1 l1 1 1 r1 \N
|
||||
1 l1 1 1 r2 \N
|
||||
2 l2 2 2 r3 \N
|
||||
2 l3 3 2 r3 \N
|
||||
3 l4 4 3 r4 \N
|
||||
3 l4 4 3 r5 \N
|
||||
4 l5 \N 4 r6 nr6
|
||||
4 l6 \N 4 r6 nr6
|
||||
5 l7 \N 0 \N
|
||||
8 l8 \N 0 \N
|
||||
9 l9 \N 9 r9 nr9
|
||||
left expr
|
||||
1 A 1 a
|
||||
1 A 1 b
|
||||
2 B 2 c
|
||||
2 C 2 c
|
||||
3 D 3 d
|
||||
3 D 3 e
|
||||
4 E 4 f
|
||||
4 F 4 f
|
||||
5 G 0
|
||||
8 H 0
|
||||
9 I 9 i
|
||||
1 l1 1 1 r1 \N
|
||||
1 l1 1 1 r2 \N
|
||||
2 l2 2 2 r3 \N
|
||||
2 l3 3 2 r3 \N
|
||||
3 l4 4 3 r4 \N
|
||||
3 l4 4 3 r5 \N
|
||||
4 l5 \N 4 r6 nr6
|
||||
4 l6 \N 4 r6 nr6
|
||||
5 l7 \N 0 \N
|
||||
8 l8 \N 0 \N
|
||||
9 l9 \N 9 r9 nr9
|
||||
right
|
||||
0 6 g
|
||||
0 7 h
|
||||
1 A 1 a
|
||||
1 A 1 b
|
||||
2 B 2 c
|
||||
2 C 2 c
|
||||
3 D 3 d
|
||||
3 D 3 e
|
||||
4 E 4 f
|
||||
4 F 4 f
|
||||
9 I 9 i
|
||||
0 \N 6 r7 nr7
|
||||
0 \N 7 r8 nr8
|
||||
1 l1 1 1 r1 \N
|
||||
1 l1 1 1 r2 \N
|
||||
2 l2 2 2 r3 \N
|
||||
2 l3 3 2 r3 \N
|
||||
3 l4 4 3 r4 \N
|
||||
3 l4 4 3 r5 \N
|
||||
4 l5 \N 4 r6 nr6
|
||||
4 l6 \N 4 r6 nr6
|
||||
9 l9 \N 9 r9 nr9
|
||||
right subs
|
||||
0 6 g
|
||||
0 7 h
|
||||
1 A 1 a
|
||||
1 A 1 b
|
||||
2 B 2 c
|
||||
2 C 2 c
|
||||
3 D 3 d
|
||||
3 D 3 e
|
||||
4 E 4 f
|
||||
4 F 4 f
|
||||
9 I 9 i
|
||||
0 \N 6 r7 nr7
|
||||
0 \N 7 r8 nr8
|
||||
1 l1 1 1 r1 \N
|
||||
1 l1 1 1 r2 \N
|
||||
2 l2 2 2 r3 \N
|
||||
2 l3 3 2 r3 \N
|
||||
3 l4 4 3 r4 \N
|
||||
3 l4 4 3 r5 \N
|
||||
4 l5 \N 4 r6 nr6
|
||||
4 l6 \N 4 r6 nr6
|
||||
9 l9 \N 9 r9 nr9
|
||||
full
|
||||
0 6 g
|
||||
0 7 h
|
||||
1 A 1 a
|
||||
1 A 1 b
|
||||
2 B 2 c
|
||||
2 C 2 c
|
||||
3 D 3 d
|
||||
3 D 3 e
|
||||
4 E 4 f
|
||||
4 F 4 f
|
||||
5 G 0
|
||||
8 H 0
|
||||
9 I 9 i
|
||||
0 \N 6 r7 nr7
|
||||
0 \N 7 r8 nr8
|
||||
1 l1 1 1 r1 \N
|
||||
1 l1 1 1 r2 \N
|
||||
2 l2 2 2 r3 \N
|
||||
2 l3 3 2 r3 \N
|
||||
3 l4 4 3 r4 \N
|
||||
3 l4 4 3 r5 \N
|
||||
4 l5 \N 4 r6 nr6
|
||||
4 l6 \N 4 r6 nr6
|
||||
5 l7 \N 0 \N
|
||||
8 l8 \N 0 \N
|
||||
9 l9 \N 9 r9 nr9
|
||||
full subs
|
||||
0 6 g
|
||||
0 7 h
|
||||
1 A 1 a
|
||||
1 A 1 b
|
||||
2 B 2 c
|
||||
2 C 2 c
|
||||
3 D 3 d
|
||||
3 D 3 e
|
||||
4 E 4 f
|
||||
4 F 4 f
|
||||
5 G 0
|
||||
8 H 0
|
||||
9 I 9 i
|
||||
0 \N 6 r7 nr7
|
||||
0 \N 7 r8 nr8
|
||||
1 l1 1 1 r1 \N
|
||||
1 l1 1 1 r2 \N
|
||||
2 l2 2 2 r3 \N
|
||||
2 l3 3 2 r3 \N
|
||||
3 l4 4 3 r4 \N
|
||||
3 l4 4 3 r5 \N
|
||||
4 l5 \N 4 r6 nr6
|
||||
4 l6 \N 4 r6 nr6
|
||||
5 l7 \N 0 \N
|
||||
8 l8 \N 0 \N
|
||||
9 l9 \N 9 r9 nr9
|
||||
self inner
|
||||
1 l1 1 1 l1 1
|
||||
2 l2 2 2 l2 2
|
||||
2 l2 2 2 l3 3
|
||||
2 l3 3 2 l2 2
|
||||
2 l3 3 2 l3 3
|
||||
3 l4 4 3 l4 4
|
||||
4 l5 \N 4 l5 \N
|
||||
4 l5 \N 4 l6 \N
|
||||
4 l6 \N 4 l5 \N
|
||||
4 l6 \N 4 l6 \N
|
||||
5 l7 \N 5 l7 \N
|
||||
8 l8 \N 8 l8 \N
|
||||
9 l9 \N 9 l9 \N
|
||||
self inner nullable
|
||||
1 l1 1 1 l1 1
|
||||
2 l2 2 2 l2 2
|
||||
2 l3 3 2 l3 3
|
||||
3 l4 4 3 l4 4
|
||||
self inner nullable vs not nullable
|
||||
1 l1 1 1 l1 1
|
||||
2 l2 2 2 l2 2
|
||||
2 l3 3 2 l2 2
|
||||
3 l4 4 2 l3 3
|
||||
4 l5 \N 3 l4 4
|
||||
4 l6 \N 3 l4 4
|
||||
self inner nullable vs not nullable 2
|
||||
4 r6 nr6 4 r6 nr6
|
||||
6 r7 nr7 6 r7 nr7
|
||||
7 r8 nr8 7 r8 nr8
|
||||
9 r9 nr9 9 r9 nr9
|
||||
self left
|
||||
1 l1 1 1 l1 1
|
||||
2 l2 2 2 l2 2
|
||||
2 l2 2 2 l3 3
|
||||
2 l3 3 2 l2 2
|
||||
2 l3 3 2 l3 3
|
||||
3 l4 4 3 l4 4
|
||||
4 l5 \N 4 l5 \N
|
||||
4 l5 \N 4 l6 \N
|
||||
4 l6 \N 4 l5 \N
|
||||
4 l6 \N 4 l6 \N
|
||||
5 l7 \N 5 l7 \N
|
||||
8 l8 \N 8 l8 \N
|
||||
9 l9 \N 9 l9 \N
|
||||
self left nullable
|
||||
1 l1 1 1 l1 1
|
||||
2 l2 2 2 l2 2
|
||||
2 l3 3 2 l3 3
|
||||
3 l4 4 3 l4 4
|
||||
4 l5 \N 0 \N
|
||||
4 l6 \N 0 \N
|
||||
5 l7 \N 0 \N
|
||||
8 l8 \N 0 \N
|
||||
9 l9 \N 0 \N
|
||||
self left nullable vs not nullable
|
||||
1 l1 1 1 l1 1
|
||||
2 l2 2 2 l2 2
|
||||
2 l3 3 2 l2 2
|
||||
3 l4 4 2 l3 3
|
||||
4 l5 \N 3 l4 4
|
||||
4 l6 \N 3 l4 4
|
||||
5 l7 \N 0 0
|
||||
8 l8 \N 0 0
|
||||
9 l9 \N 0 0
|
||||
self left nullable vs not nullable 2
|
||||
1 r1 \N 0
|
||||
1 r2 \N 0
|
||||
2 r3 \N 0
|
||||
3 r4 \N 0
|
||||
3 r5 \N 0
|
||||
4 r6 nr6 4 r6 nr6
|
||||
6 r7 nr7 6 r7 nr7
|
||||
7 r8 nr8 7 r8 nr8
|
||||
9 r9 nr9 9 r9 nr9
|
||||
self right
|
||||
1 l1 1 1 l1 1
|
||||
2 l2 2 2 l2 2
|
||||
2 l2 2 2 l3 3
|
||||
2 l3 3 2 l2 2
|
||||
2 l3 3 2 l3 3
|
||||
3 l4 4 3 l4 4
|
||||
4 l5 \N 4 l5 \N
|
||||
4 l5 \N 4 l6 \N
|
||||
4 l6 \N 4 l5 \N
|
||||
4 l6 \N 4 l6 \N
|
||||
5 l7 \N 5 l7 \N
|
||||
8 l8 \N 8 l8 \N
|
||||
9 l9 \N 9 l9 \N
|
||||
self right nullable
|
||||
1 l1 1 1 l1 1
|
||||
2 l2 2 2 l2 2
|
||||
2 l3 3 2 l3 3
|
||||
3 l4 4 3 l4 4
|
||||
self right nullable vs not nullable
|
||||
1 l1 1 1 l1 1
|
||||
2 l2 2 2 l2 2
|
||||
2 l3 3 2 l2 2
|
||||
3 l4 4 2 l3 3
|
||||
4 l5 \N 3 l4 4
|
||||
4 l6 \N 3 l4 4
|
||||
self full
|
||||
1 l1 1 1 l1 1
|
||||
2 l2 2 2 l2 2
|
||||
2 l2 2 2 l3 3
|
||||
2 l3 3 2 l2 2
|
||||
2 l3 3 2 l3 3
|
||||
3 l4 4 3 l4 4
|
||||
4 l5 \N 4 l5 \N
|
||||
4 l5 \N 4 l6 \N
|
||||
4 l6 \N 4 l5 \N
|
||||
4 l6 \N 4 l6 \N
|
||||
5 l7 \N 5 l7 \N
|
||||
8 l8 \N 8 l8 \N
|
||||
9 l9 \N 9 l9 \N
|
||||
self full nullable
|
||||
1 l1 1 1 l1 1
|
||||
2 l2 2 2 l2 2
|
||||
2 l3 3 2 l3 3
|
||||
3 l4 4 3 l4 4
|
||||
4 l5 \N 0 \N
|
||||
4 l6 \N 0 \N
|
||||
5 l7 \N 0 \N
|
||||
8 l8 \N 0 \N
|
||||
9 l9 \N 0 \N
|
||||
self full nullable vs not nullable
|
||||
1 l1 1 1 l1 1
|
||||
2 l2 2 2 l2 2
|
||||
2 l3 3 2 l2 2
|
||||
3 l4 4 2 l3 3
|
||||
4 l5 \N 3 l4 4
|
||||
4 l6 \N 3 l4 4
|
||||
5 l7 \N 0 0
|
||||
8 l8 \N 0 0
|
||||
9 l9 \N 0 0
|
||||
|
@ -2,25 +2,27 @@ use test;
|
||||
drop table if exists X;
|
||||
drop table if exists Y;
|
||||
|
||||
create table X (id Int32, x_name String) engine Memory;
|
||||
create table Y (id Int32, y_name String) engine Memory;
|
||||
create table X (id Int32, x_a String, x_b Nullable(Int32)) engine Memory;
|
||||
create table Y (id Int32, y_a String, y_b Nullable(String)) engine Memory;
|
||||
|
||||
insert into X (id, x_name) values (1, 'A'), (2, 'B'), (2, 'C'), (3, 'D'), (4, 'E'), (4, 'F'), (5, 'G'), (8, 'H'), (9, 'I');
|
||||
insert into Y (id, y_name) values (1, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (3, 'e'), (4, 'f'), (6, 'g'), (7, 'h'), (9, 'i');
|
||||
insert into X (id, x_a, x_b) values (1, 'l1', 1), (2, 'l2', 2), (2, 'l3', 3), (3, 'l4', 4);
|
||||
insert into X (id, x_a) values (4, 'l5'), (4, 'l6'), (5, 'l7'), (8, 'l8'), (9, 'l9');
|
||||
insert into Y (id, y_a) values (1, 'r1'), (1, 'r2'), (2, 'r3'), (3, 'r4'), (3, 'r5');
|
||||
insert into Y (id, y_a, y_b) values (4, 'r6', 'nr6'), (6, 'r7', 'nr7'), (7, 'r8', 'nr8'), (9, 'r9', 'nr9');
|
||||
|
||||
select 'inner';
|
||||
select X.*, Y.* from X inner join Y on X.id = Y.id;
|
||||
select X.*, Y.* from X inner join Y on X.id = Y.id order by id;
|
||||
select 'inner subs';
|
||||
select s.*, j.* from (select * from X) as s inner join (select * from Y) as j on s.id = j.id;
|
||||
select s.*, j.* from (select * from X) as s inner join (select * from Y) as j on s.id = j.id order by id;
|
||||
select 'inner expr';
|
||||
select X.*, Y.* from X inner join Y on (X.id + 1) = (Y.id + 1);
|
||||
select X.*, Y.* from X inner join Y on (X.id + 1) = (Y.id + 1) order by id;
|
||||
|
||||
select 'left';
|
||||
select X.*, Y.* from X left join Y on X.id = Y.id;
|
||||
select X.*, Y.* from X left join Y on X.id = Y.id order by id;
|
||||
select 'left subs';
|
||||
select s.*, j.* from (select * from X) as s left join (select * from Y) as j on s.id = j.id;
|
||||
select s.*, j.* from (select * from X) as s left join (select * from Y) as j on s.id = j.id order by id;
|
||||
select 'left expr';
|
||||
select X.*, Y.* from X left join Y on (X.id + 1) = (Y.id + 1);
|
||||
select X.*, Y.* from X left join Y on (X.id + 1) = (Y.id + 1) order by id;
|
||||
|
||||
select 'right';
|
||||
select X.*, Y.* from X right join Y on X.id = Y.id order by id;
|
||||
@ -36,5 +38,43 @@ select s.*, j.* from (select * from X) as s full join (select * from Y) as j on
|
||||
--select 'full expr';
|
||||
--select X.*, Y.* from X full join Y on (X.id + 1) = (Y.id + 1) order by id;
|
||||
|
||||
select 'self inner';
|
||||
select X.*, s.* from X inner join (select * from X) as s on X.id = s.id order by X.id;
|
||||
select 'self inner nullable';
|
||||
select X.*, s.* from X inner join (select * from X) as s on X.x_b = s.x_b order by X.id;
|
||||
select 'self inner nullable vs not nullable';
|
||||
select X.*, s.* from X inner join (select * from X) as s on X.id = s.x_b order by X.id;
|
||||
-- TODO: s.y_b == '' instead of NULL
|
||||
select 'self inner nullable vs not nullable 2';
|
||||
select Y.*, s.* from Y inner join (select * from Y) as s on concat('n', Y.y_a) = s.y_b order by id;
|
||||
|
||||
select 'self left';
|
||||
select X.*, s.* from X left join (select * from X) as s on X.id = s.id order by X.id;
|
||||
select 'self left nullable';
|
||||
select X.*, s.* from X left join (select * from X) as s on X.x_b = s.x_b order by X.id;
|
||||
select 'self left nullable vs not nullable';
|
||||
select X.*, s.* from X left join (select * from X) as s on X.id = s.x_b order by X.id;
|
||||
-- TODO: s.y_b == '' instead of NULL
|
||||
select 'self left nullable vs not nullable 2';
|
||||
select Y.*, s.* from Y left join (select * from Y) as s on concat('n', Y.y_a) = s.y_b order by id;
|
||||
|
||||
select 'self right';
|
||||
select X.*, s.* from X right join (select * from X) as s on X.id = s.id order by X.id;
|
||||
select 'self right nullable';
|
||||
select X.*, s.* from X right join (select * from X) as s on X.x_b = s.x_b order by X.id;
|
||||
select 'self right nullable vs not nullable';
|
||||
select X.*, s.* from X right join (select * from X) as s on X.id = s.x_b order by X.id;
|
||||
--select 'self right nullable vs not nullable 2';
|
||||
--select Y.*, s.* from Y right join (select * from Y) as s on concat('n', Y.y_a) = s.y_b order by id;
|
||||
|
||||
select 'self full';
|
||||
select X.*, s.* from X full join (select * from X) as s on X.id = s.id order by X.id;
|
||||
select 'self full nullable';
|
||||
select X.*, s.* from X full join (select * from X) as s on X.x_b = s.x_b order by X.id;
|
||||
select 'self full nullable vs not nullable';
|
||||
select X.*, s.* from X full join (select * from X) as s on X.id = s.x_b order by X.id;
|
||||
--select 'self full nullable vs not nullable 2';
|
||||
--select Y.*, s.* from Y full join (select * from Y) as s on concat('n', Y.y_a) = s.y_b order by id;
|
||||
|
||||
drop table X;
|
||||
drop table Y;
|
||||
|
Loading…
Reference in New Issue
Block a user