Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
70c30c8d
Commit
70c30c8d
authored
Nov 30, 2005
by
jimw@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal:/home/bk/mysql-5.0
into mysql.com:/home/jimw/my/mysql-5.0-clean
parents
f8afbe6f
33405b01
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
508 additions
and
0 deletions
+508
-0
mysql-test/r/join.result
mysql-test/r/join.result
+301
-0
mysql-test/t/join.test
mysql-test/t/join.test
+207
-0
No files found.
mysql-test/r/join.result
View file @
70c30c8d
...
@@ -391,3 +391,304 @@ i i i
...
@@ -391,3 +391,304 @@ i i i
2 NULL 4
2 NULL 4
2 2 2
2 2 2
drop table t1,t2,t3;
drop table t1,t2,t3;
create table t1 (c int, b int);
create table t2 (a int, b int);
create table t3 (b int, c int);
create table t4 (y int, c int);
create table t5 (y int, z int);
create table t6 (a int, c int);
insert into t1 values (10,1);
insert into t1 values (3 ,1);
insert into t1 values (3 ,2);
insert into t2 values (2, 1);
insert into t3 values (1, 3);
insert into t3 values (1,10);
insert into t4 values (11,3);
insert into t4 values (2, 3);
insert into t5 values (11,4);
insert into t6 values (2, 3);
create algorithm=merge view v1a as
select * from t1 natural join t2;
create algorithm=merge view v1b(a,b,c) as
select * from t1 natural join t2;
create algorithm=merge view v1c as
select b as a, c as b, a as c from t1 natural join t2;
create algorithm=merge view v1d(b, a, c) as
select a as c, c as b, b as a from t1 natural join t2;
create algorithm=merge view v2a as
select t1.c, t1.b, t2.a from t1 join (t2 join t4 on b + 1 = y) on t1.c = t4.c;
create algorithm=merge view v2b as
select t1.c as b, t1.b as a, t2.a as c
from t1 join (t2 join t4 on b + 1 = y) on t1.c = t4.c;
create algorithm=merge view v3a as
select * from t1 natural join t2 natural join t3;
create algorithm=merge view v3b as
select * from t1 natural join (t2 natural join t3);
create algorithm=merge view v4 as
select * from v2a natural join v3a;
select * from (t1 natural join t2) natural join (t3 natural join t4);
b c a y
1 3 2 11
1 3 2 2
select * from (t1 natural join t2) natural left join (t3 natural join t4);
b c a y
1 10 2 NULL
1 3 2 11
1 3 2 2
select * from (t3 natural join t4) natural right join (t1 natural join t2);
b c a y
1 10 2 NULL
1 3 2 11
1 3 2 2
select * from (t1 natural left join t2) natural left join (t3 natural left join t4);
b c a y
1 10 2 NULL
1 3 2 11
1 3 2 2
2 3 NULL NULL
select * from (t4 natural right join t3) natural right join (t2 natural right join t1);
b c a y
1 10 2 NULL
1 3 2 11
1 3 2 2
2 3 NULL NULL
select * from t1 natural join t2 natural join t3 natural join t4;
c b a y
3 1 2 11
3 1 2 2
select * from ((t1 natural join t2) natural join t3) natural join t4;
c b a y
3 1 2 11
3 1 2 2
select * from t1 natural join (t2 natural join (t3 natural join t4));
c b a y
3 1 2 11
3 1 2 2
select * from t5 natural right join (t4 natural right join ((t2 natural right join t1) natural right join t3));
y c b a z
11 3 1 2 4
2 3 1 2 NULL
NULL 10 1 2 NULL
select * from (t1 natural join t2), (t3 natural join t4);
b c a c b y
1 10 2 3 1 11
1 10 2 3 1 2
1 3 2 3 1 11
1 3 2 3 1 2
select * from (t1 join t2 using (b)) join (t3 join t4 using (c)) using (c);
c b a b y
3 1 2 1 11
3 1 2 1 2
select * from (t1 join t2 using (b)) natural join (t3 join t4 using (c));
b c a y
1 3 2 11
1 3 2 2
select a,b,c from (t1 natural join t2) natural join (t3 natural join t4)
where b + 1 = y or b + 10 = y group by b,c,a having min(b) < max(y) order by a;
a b c
2 1 3
select * from (t1 natural join t2) natural left join (t3 natural join t4)
where b + 1 = y or b + 10 = y group by b,c,a,y having min(b) < max(y) order by a, y;
b c a y
1 3 2 2
1 3 2 11
select * from (t3 natural join t4) natural right join (t1 natural join t2)
where b + 1 = y or b + 10 = y group by b,c,a,y having min(b) < max(y) order by a, y;
b c a y
1 3 2 2
1 3 2 11
select * from t1 natural join t2 where t1.c > t2.a;
b c a
1 10 2
1 3 2
select * from t1 natural join t2 where t1.b > t2.b;
b c a
select * from t1 natural left join (t4 natural join t5) where t5.z is not NULL;
c b y z
3 1 11 4
3 2 11 4
select * from t1 join (t2 join t4 on b + 1 = y) on t1.c = t4.c;
c b a b y c
3 1 2 1 2 3
3 2 2 1 2 3
select * from (t2 join t4 on b + 1 = y) join t1 on t1.c = t4.c;
a b y c c b
2 1 2 3 3 1
2 1 2 3 3 2
select * from t1 natural join (t2 join t4 on b + 1 = y);
c b a y
3 1 2 2
select * from (t1 cross join t2) join (t3 cross join t4) on (a < y and t2.b < t3.c);
c b a b b c y c
10 1 2 1 1 3 11 3
10 1 2 1 1 10 11 3
3 1 2 1 1 3 11 3
3 1 2 1 1 10 11 3
3 2 2 1 1 3 11 3
3 2 2 1 1 10 11 3
select * from (t1, t2) join (t3, t4) on (a < y and t2.b < t3.c);
c b a b b c y c
10 1 2 1 1 3 11 3
10 1 2 1 1 10 11 3
3 1 2 1 1 3 11 3
3 1 2 1 1 10 11 3
3 2 2 1 1 3 11 3
3 2 2 1 1 10 11 3
select * from (t1 natural join t2) join (t3 natural join t4) on a = y;
b c a c b y
1 10 2 3 1 2
1 3 2 3 1 2
select * from ((t3 join (t1 join t2 on c > a) on t3.b < t2.a) join t4 on y > t1.c) join t5 on z = t1.b + 3;
b c c b a b y c y z
1 3 10 1 2 1 11 3 11 4
1 10 10 1 2 1 11 3 11 4
1 3 3 1 2 1 11 3 11 4
1 10 3 1 2 1 11 3 11 4
select * from t1 natural join t2 where t1.b > 0;
b c a
1 10 2
1 3 2
select * from t1 natural join (t4 natural join t5) where t4.y > 7;
c b y z
3 1 11 4
3 2 11 4
select * from (t4 natural join t5) natural join t1 where t4.y > 7;
c y z b
3 11 4 1
3 11 4 2
select * from t1 natural left join (t4 natural join t5) where t4.y > 7;
c b y z
3 1 11 4
3 2 11 4
select * from (t4 natural join t5) natural right join t1 where t4.y > 7;
c b y z
3 1 11 4
3 2 11 4
select * from (t1 natural join t2) join (t3 natural join t4) on t1.b = t3.b;
b c a c b y
1 10 2 3 1 11
1 10 2 3 1 2
1 3 2 3 1 11
1 3 2 3 1 2
select t1.*, t2.* from t1 natural join t2;
c b a b
10 1 2 1
3 1 2 1
select t1.*, t2.*, t3.*, t4.* from (t1 natural join t2) natural join (t3 natural join t4);
c b a b b c y c
3 1 2 1 1 3 11 3
3 1 2 1 1 3 2 3
select * from (select * from t1 natural join t2) as t12
natural join
(select * from t3 natural join t4) as t34;
b c a y
1 3 2 11
1 3 2 2
select * from (select * from t1 natural join t2) as t12
natural left join
(select * from t3 natural join t4) as t34;
b c a y
1 10 2 NULL
1 3 2 11
1 3 2 2
select * from (select * from t3 natural join t4) as t34
natural right join
(select * from t1 natural join t2) as t12;
b c a y
1 10 2 NULL
1 3 2 11
1 3 2 2
select * from v1a;
b c a
1 10 2
1 3 2
select * from v1b;
a b c
1 10 2
1 3 2
select * from v1c;
a b c
1 10 2
1 3 2
select * from v1d;
b a c
2 10 1
2 3 1
select * from v2a;
c b a
3 1 2
3 2 2
select * from v2b;
b a c
3 1 2
3 2 2
select * from v3a;
b c a
1 10 2
1 3 2
select * from v3b;
c b a
10 1 2
3 1 2
select * from v4;
c b a
3 1 2
select * from v1a natural join v2a;
b c a
1 3 2
select v2a.* from v1a natural join v2a;
c b a
3 1 2
select * from v1b join v2a on v1b.b = v2a.c;
a b c c b a
1 3 2 3 1 2
1 3 2 3 2 2
select * from v1c join v2a on v1c.b = v2a.c;
a b c c b a
1 3 2 3 1 2
1 3 2 3 2 2
select * from v1d join v2a on v1d.a = v2a.c;
b a c c b a
2 3 1 3 1 2
2 3 1 3 2 2
select * from v1a join (t3 natural join t4) on a = y;
b c a c b y
1 10 2 3 1 2
1 3 2 3 1 2
select * from t1 natural join (t3 cross join t4);
ERROR 23000: Column 'c' in from clause is ambiguous
select * from (t3 cross join t4) natural join t1;
ERROR 23000: Column 'c' in from clause is ambiguous
select * from t1 join (t2, t3) using (b);
ERROR 23000: Column 'b' in from clause is ambiguous
select * from ((t1 natural join t2), (t3 natural join t4)) natural join t6;
ERROR 23000: Column 'c' in from clause is ambiguous
select * from ((t1 natural join t2), (t3 natural join t4)) natural join t6;
ERROR 23000: Column 'c' in from clause is ambiguous
select * from (t1 join t2 on t1.b=t2.b) natural join (t3 natural join t4);
ERROR 23000: Column 'b' in from clause is ambiguous
select * from (t3 natural join t4) natural join (t1 join t2 on t1.b=t2.b);
ERROR 23000: Column 'b' in from clause is ambiguous
select * from (t3 join (t4 natural join t5) on (b < z))
natural join
(t1 natural join t2);
ERROR 23000: Column 'c' in from clause is ambiguous
select t1.b from v1a;
ERROR 42S22: Unknown column 't1.b' in 'field list'
select * from v1a join v1b on t1.b = t2.b;
ERROR 42S22: Unknown column 't1.b' in 'on clause'
drop table t1;
drop table t2;
drop table t3;
drop table t4;
drop table t5;
drop table t6;
drop view v1a;
drop view v1b;
drop view v1c;
drop view v1d;
drop view v2a;
drop view v2b;
drop view v3a;
drop view v3b;
drop view v4;
mysql-test/t/join.test
View file @
70c30c8d
...
@@ -334,3 +334,210 @@ select t1.i,t2.i,t3.i from t2 right join t3 on (t2.i=t3.i),t1 order by t1.i,t2.i
...
@@ -334,3 +334,210 @@ select t1.i,t2.i,t3.i from t2 right join t3 on (t2.i=t3.i),t1 order by t1.i,t2.i
drop
table
t1
,
t2
,
t3
;
drop
table
t1
,
t2
,
t3
;
# End of 4.1 tests
# End of 4.1 tests
#
# Tests for WL#2486 Natural/using join according to SQL:2003.
#
# NOTICE:
# - The tests are designed so that all statements, except MySQL
# extensions run on any SQL server. Please do no change.
# - Tests marked with TODO will be submitted as bugs.
#
create
table
t1
(
c
int
,
b
int
);
create
table
t2
(
a
int
,
b
int
);
create
table
t3
(
b
int
,
c
int
);
create
table
t4
(
y
int
,
c
int
);
create
table
t5
(
y
int
,
z
int
);
create
table
t6
(
a
int
,
c
int
);
insert
into
t1
values
(
10
,
1
);
insert
into
t1
values
(
3
,
1
);
insert
into
t1
values
(
3
,
2
);
insert
into
t2
values
(
2
,
1
);
insert
into
t3
values
(
1
,
3
);
insert
into
t3
values
(
1
,
10
);
insert
into
t4
values
(
11
,
3
);
insert
into
t4
values
(
2
,
3
);
insert
into
t5
values
(
11
,
4
);
insert
into
t6
values
(
2
,
3
);
--
Views
with
simple
natural
join
.
create
algorithm
=
merge
view
v1a
as
select
*
from
t1
natural
join
t2
;
--
as
above
,
but
column
names
are
cross
-
renamed
:
a
->
c
,
c
->
b
,
b
->
a
create
algorithm
=
merge
view
v1b
(
a
,
b
,
c
)
as
select
*
from
t1
natural
join
t2
;
--
as
above
,
but
column
names
are
aliased
:
a
->
c
,
c
->
b
,
b
->
a
create
algorithm
=
merge
view
v1c
as
select
b
as
a
,
c
as
b
,
a
as
c
from
t1
natural
join
t2
;
--
as
above
,
but
column
names
are
cross
-
renamed
,
and
aliased
--
a
->
c
->
b
,
c
->
b
->
a
,
b
->
a
->
c
create
algorithm
=
merge
view
v1d
(
b
,
a
,
c
)
as
select
a
as
c
,
c
as
b
,
b
as
a
from
t1
natural
join
t2
;
--
Views
with
JOIN
...
ON
create
algorithm
=
merge
view
v2a
as
select
t1
.
c
,
t1
.
b
,
t2
.
a
from
t1
join
(
t2
join
t4
on
b
+
1
=
y
)
on
t1
.
c
=
t4
.
c
;
create
algorithm
=
merge
view
v2b
as
select
t1
.
c
as
b
,
t1
.
b
as
a
,
t2
.
a
as
c
from
t1
join
(
t2
join
t4
on
b
+
1
=
y
)
on
t1
.
c
=
t4
.
c
;
--
Views
with
bigger
natural
join
create
algorithm
=
merge
view
v3a
as
select
*
from
t1
natural
join
t2
natural
join
t3
;
create
algorithm
=
merge
view
v3b
as
select
*
from
t1
natural
join
(
t2
natural
join
t3
);
--
View
over
views
with
mixed
natural
join
and
join
...
on
create
algorithm
=
merge
view
v4
as
select
*
from
v2a
natural
join
v3a
;
--
Nested
natural
/
using
joins
.
select
*
from
(
t1
natural
join
t2
)
natural
join
(
t3
natural
join
t4
);
select
*
from
(
t1
natural
join
t2
)
natural
left
join
(
t3
natural
join
t4
);
select
*
from
(
t3
natural
join
t4
)
natural
right
join
(
t1
natural
join
t2
);
select
*
from
(
t1
natural
left
join
t2
)
natural
left
join
(
t3
natural
left
join
t4
);
select
*
from
(
t4
natural
right
join
t3
)
natural
right
join
(
t2
natural
right
join
t1
);
select
*
from
t1
natural
join
t2
natural
join
t3
natural
join
t4
;
select
*
from
((
t1
natural
join
t2
)
natural
join
t3
)
natural
join
t4
;
select
*
from
t1
natural
join
(
t2
natural
join
(
t3
natural
join
t4
));
--
BUG
#15355: this query fails in 'prepared statements' mode
--
select
*
from
((
t3
natural
join
(
t1
natural
join
t2
))
natural
join
t4
)
natural
join
t5
;
--
select
*
from
((
t3
natural
left
join
(
t1
natural
left
join
t2
))
natural
left
join
t4
)
natural
left
join
t5
;
select
*
from
t5
natural
right
join
(
t4
natural
right
join
((
t2
natural
right
join
t1
)
natural
right
join
t3
));
select
*
from
(
t1
natural
join
t2
),
(
t3
natural
join
t4
);
--
MySQL
extension
-
nested
comma
','
operator
instead
of
cross
join
.
--
BUG
#15357 - natural join with nested cross-join results in incorrect columns
--
select
*
from
t5
natural
join
((
t1
natural
join
t2
),
(
t3
natural
join
t4
));
--
select
*
from
((
t1
natural
join
t2
),
(
t3
natural
join
t4
))
natural
join
t5
;
--
select
*
from
t5
natural
join
((
t1
natural
join
t2
)
cross
join
(
t3
natural
join
t4
));
--
select
*
from
((
t1
natural
join
t2
)
cross
join
(
t3
natural
join
t4
))
natural
join
t5
;
select
*
from
(
t1
join
t2
using
(
b
))
join
(
t3
join
t4
using
(
c
))
using
(
c
);
select
*
from
(
t1
join
t2
using
(
b
))
natural
join
(
t3
join
t4
using
(
c
));
--
Other
clauses
refer
to
NJ
columns
.
select
a
,
b
,
c
from
(
t1
natural
join
t2
)
natural
join
(
t3
natural
join
t4
)
where
b
+
1
=
y
or
b
+
10
=
y
group
by
b
,
c
,
a
having
min
(
b
)
<
max
(
y
)
order
by
a
;
select
*
from
(
t1
natural
join
t2
)
natural
left
join
(
t3
natural
join
t4
)
where
b
+
1
=
y
or
b
+
10
=
y
group
by
b
,
c
,
a
,
y
having
min
(
b
)
<
max
(
y
)
order
by
a
,
y
;
select
*
from
(
t3
natural
join
t4
)
natural
right
join
(
t1
natural
join
t2
)
where
b
+
1
=
y
or
b
+
10
=
y
group
by
b
,
c
,
a
,
y
having
min
(
b
)
<
max
(
y
)
order
by
a
,
y
;
--
Qualified
column
references
to
NJ
columns
.
select
*
from
t1
natural
join
t2
where
t1
.
c
>
t2
.
a
;
select
*
from
t1
natural
join
t2
where
t1
.
b
>
t2
.
b
;
select
*
from
t1
natural
left
join
(
t4
natural
join
t5
)
where
t5
.
z
is
not
NULL
;
--
Nested
'join ... on'
-
name
resolution
of
ON
conditions
select
*
from
t1
join
(
t2
join
t4
on
b
+
1
=
y
)
on
t1
.
c
=
t4
.
c
;
select
*
from
(
t2
join
t4
on
b
+
1
=
y
)
join
t1
on
t1
.
c
=
t4
.
c
;
select
*
from
t1
natural
join
(
t2
join
t4
on
b
+
1
=
y
);
select
*
from
(
t1
cross
join
t2
)
join
(
t3
cross
join
t4
)
on
(
a
<
y
and
t2
.
b
<
t3
.
c
);
--
MySQL
extension
-
'join ... on'
over
nested
comma
operator
select
*
from
(
t1
,
t2
)
join
(
t3
,
t4
)
on
(
a
<
y
and
t2
.
b
<
t3
.
c
);
select
*
from
(
t1
natural
join
t2
)
join
(
t3
natural
join
t4
)
on
a
=
y
;
select
*
from
((
t3
join
(
t1
join
t2
on
c
>
a
)
on
t3
.
b
<
t2
.
a
)
join
t4
on
y
>
t1
.
c
)
join
t5
on
z
=
t1
.
b
+
3
;
--
MySQL
extension
-
refererence
qualified
coalesced
columns
select
*
from
t1
natural
join
t2
where
t1
.
b
>
0
;
select
*
from
t1
natural
join
(
t4
natural
join
t5
)
where
t4
.
y
>
7
;
select
*
from
(
t4
natural
join
t5
)
natural
join
t1
where
t4
.
y
>
7
;
select
*
from
t1
natural
left
join
(
t4
natural
join
t5
)
where
t4
.
y
>
7
;
select
*
from
(
t4
natural
join
t5
)
natural
right
join
t1
where
t4
.
y
>
7
;
select
*
from
(
t1
natural
join
t2
)
join
(
t3
natural
join
t4
)
on
t1
.
b
=
t3
.
b
;
--
MySQL
extension
-
select
qualified
columns
of
NJ
columns
select
t1
.*
,
t2
.*
from
t1
natural
join
t2
;
select
t1
.*
,
t2
.*
,
t3
.*
,
t4
.*
from
(
t1
natural
join
t2
)
natural
join
(
t3
natural
join
t4
);
--
Queries
over
subselects
in
the
FROM
clause
select
*
from
(
select
*
from
t1
natural
join
t2
)
as
t12
natural
join
(
select
*
from
t3
natural
join
t4
)
as
t34
;
select
*
from
(
select
*
from
t1
natural
join
t2
)
as
t12
natural
left
join
(
select
*
from
t3
natural
join
t4
)
as
t34
;
select
*
from
(
select
*
from
t3
natural
join
t4
)
as
t34
natural
right
join
(
select
*
from
t1
natural
join
t2
)
as
t12
;
--
Queries
over
views
select
*
from
v1a
;
select
*
from
v1b
;
select
*
from
v1c
;
select
*
from
v1d
;
select
*
from
v2a
;
select
*
from
v2b
;
select
*
from
v3a
;
select
*
from
v3b
;
select
*
from
v4
;
select
*
from
v1a
natural
join
v2a
;
select
v2a
.*
from
v1a
natural
join
v2a
;
select
*
from
v1b
join
v2a
on
v1b
.
b
=
v2a
.
c
;
select
*
from
v1c
join
v2a
on
v1c
.
b
=
v2a
.
c
;
select
*
from
v1d
join
v2a
on
v1d
.
a
=
v2a
.
c
;
select
*
from
v1a
join
(
t3
natural
join
t4
)
on
a
=
y
;
--
TODO
:
add
tests
with
correlated
subqueries
for
natural
join
/
join
on
.
--
related
to
BUG
#15269
----------------------------------------------------------------------
--
Negative
tests
(
tests
for
errors
)
----------------------------------------------------------------------
--
error
1052
select
*
from
t1
natural
join
(
t3
cross
join
t4
);
--
works
in
Oracle
-
bug
--
error
1052
select
*
from
(
t3
cross
join
t4
)
natural
join
t1
;
--
works
in
Oracle
-
bug
--
error
1052
select
*
from
t1
join
(
t2
,
t3
)
using
(
b
);
--
error
1052
select
*
from
((
t1
natural
join
t2
),
(
t3
natural
join
t4
))
natural
join
t6
;
--
error
1052
select
*
from
((
t1
natural
join
t2
),
(
t3
natural
join
t4
))
natural
join
t6
;
--
error
1052
--
BUG
#15357: doesn't detect non-unique column 'c', as in the above query.
--
select
*
from
t6
natural
join
((
t1
natural
join
t2
),
(
t3
natural
join
t4
));
--
error
1052
select
*
from
(
t1
join
t2
on
t1
.
b
=
t2
.
b
)
natural
join
(
t3
natural
join
t4
);
--
error
1052
select
*
from
(
t3
natural
join
t4
)
natural
join
(
t1
join
t2
on
t1
.
b
=
t2
.
b
);
--
this
one
is
OK
,
the
next
equivalent
one
is
incorrect
(
bug
in
Oracle
)
--
error
1052
select
*
from
(
t3
join
(
t4
natural
join
t5
)
on
(
b
<
z
))
natural
join
(
t1
natural
join
t2
);
--
error
1052
--
BUG
#15357: this query should return an ambiguous column error
--
Expected
result
:
the
query
must
return
error
with
duplicate
column
'c'
--
select
*
from
(
t1
natural
join
t2
)
--
natural
join
--
(
t3
join
(
t4
natural
join
t5
)
on
(
b
<
z
));
--
error
1054
select
t1
.
b
from
v1a
;
--
error
1054
select
*
from
v1a
join
v1b
on
t1
.
b
=
t2
.
b
;
drop
table
t1
;
drop
table
t2
;
drop
table
t3
;
drop
table
t4
;
drop
table
t5
;
drop
table
t6
;
drop
view
v1a
;
drop
view
v1b
;
drop
view
v1c
;
drop
view
v1d
;
drop
view
v2a
;
drop
view
v2b
;
drop
view
v3a
;
drop
view
v3b
;
drop
view
v4
;
# End of tests for WL#2486 - natural/using join
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment