2021-11-08 12:44:13 +00:00
|
|
|
DROP TABLE IF EXISTS t1;
|
|
|
|
DROP TABLE IF EXISTS t2;
|
|
|
|
|
|
|
|
CREATE TABLE t1 (id Int) ENGINE = Memory;
|
|
|
|
CREATE TABLE t2 (id Int) ENGINE = Memory;
|
|
|
|
|
|
|
|
INSERT INTO t1 VALUES (1), (2);
|
|
|
|
INSERT INTO t2 VALUES (2), (3);
|
|
|
|
|
|
|
|
SELECT 70 = 10 * sum(t1.id) + sum(t2.id) AND count() == 4 FROM t1 JOIN t2 ON 1 = 1;
|
|
|
|
SELECT 70 = 10 * sum(t1.id) + sum(t2.id) AND count() == 4 FROM t1 JOIN t2 ON 1;
|
|
|
|
SELECT 70 = 10 * sum(t1.id) + sum(t2.id) AND count() == 4 FROM t1 JOIN t2 ON 2 = 2 AND 3 = 3;
|
2023-05-11 15:12:46 +00:00
|
|
|
SELECT 70 = 10 * sum(t1.id) + sum(t2.id) AND count() == 4 FROM t1 JOIN t2 ON toNullable(1);
|
|
|
|
SELECT 70 = 10 * sum(t1.id) + sum(t2.id) AND count() == 4 FROM t1 JOIN t2 ON toLowCardinality(1);
|
|
|
|
SELECT 70 = 10 * sum(t1.id) + sum(t2.id) AND count() == 4 FROM t1 JOIN t2 ON toLowCardinality(toNullable(1));
|
|
|
|
SELECT 70 = 10 * sum(t1.id) + sum(t2.id) AND count() == 4 FROM t1 JOIN t2 ON toNullable(toLowCardinality(1));
|
2021-11-08 12:44:13 +00:00
|
|
|
|
2023-05-11 15:12:46 +00:00
|
|
|
SELECT * FROM t1 JOIN t2 ON toUInt16(1); -- { serverError 403 }
|
|
|
|
SELECT * FROM t1 JOIN t2 ON toInt8(1); -- { serverError 403 }
|
|
|
|
SELECT * FROM t1 JOIN t2 ON 256; -- { serverError 403 }
|
|
|
|
SELECT * FROM t1 JOIN t2 ON -1; -- { serverError 403 }
|
|
|
|
SELECT * FROM t1 JOIN t2 ON toString(1); -- { serverError 403 }
|
2021-11-08 12:44:13 +00:00
|
|
|
|
|
|
|
SELECT '- ON NULL -';
|
|
|
|
|
|
|
|
SELECT '- inner -';
|
2023-05-11 15:12:46 +00:00
|
|
|
SELECT * FROM t1 JOIN t2 ON NULL;
|
|
|
|
SELECT * FROM t1 JOIN t2 ON 0;
|
|
|
|
SELECT * FROM t1 JOIN t2 ON 1 = 2;
|
2021-11-08 12:44:13 +00:00
|
|
|
SELECT '- left -';
|
|
|
|
SELECT * FROM t1 LEFT JOIN t2 ON NULL ORDER BY t1.id, t2.id;
|
|
|
|
SELECT '- right -';
|
|
|
|
SELECT * FROM t1 RIGHT JOIN t2 ON NULL ORDER BY t1.id, t2.id;
|
|
|
|
SELECT '- full -';
|
|
|
|
SELECT * FROM t1 FULL JOIN t2 ON NULL ORDER BY t1.id, t2.id;
|
|
|
|
|
|
|
|
SELECT '- inner -';
|
2023-05-11 15:12:46 +00:00
|
|
|
SELECT * FROM t1 JOIN t2 ON NULL ORDER BY t1.id NULLS FIRST, t2.id SETTINGS join_use_nulls = 1;
|
2021-11-08 12:44:13 +00:00
|
|
|
SELECT '- left -';
|
|
|
|
SELECT * FROM t1 LEFT JOIN t2 ON NULL ORDER BY t1.id NULLS FIRST, t2.id SETTINGS join_use_nulls = 1;
|
|
|
|
SELECT '- right -';
|
|
|
|
SELECT * FROM t1 RIGHT JOIN t2 ON NULL ORDER BY t1.id NULLS FIRST, t2.id SETTINGS join_use_nulls = 1;
|
|
|
|
SELECT '- full -';
|
|
|
|
SELECT * FROM t1 FULL JOIN t2 ON NULL ORDER BY t1.id NULLS FIRST, t2.id SETTINGS join_use_nulls = 1;
|
|
|
|
|
2023-05-11 15:12:46 +00:00
|
|
|
-- in this cases in old analuyzer we have AMBIGUOUS_COLUMN_NAME instead of INVALID_JOIN_ON_EXPRESSION
|
2022-12-07 17:23:14 +00:00
|
|
|
-- because there's some function in ON expression is not constant itself (result is constant)
|
2023-05-11 15:12:46 +00:00
|
|
|
SELECT * FROM t1 JOIN t2 ON 1 = 1 SETTINGS join_algorithm = 'full_sorting_merge'; -- { serverError AMBIGUOUS_COLUMN_NAME,NOT_IMPLEMENTED }
|
|
|
|
SELECT * FROM t1 JOIN t2 ON 1 = 1 SETTINGS join_algorithm = 'partial_merge'; -- { serverError AMBIGUOUS_COLUMN_NAME,NOT_IMPLEMENTED }
|
|
|
|
SELECT * FROM t1 JOIN t2 ON 1 = 1 SETTINGS join_algorithm = 'auto'; -- { serverError AMBIGUOUS_COLUMN_NAME,NOT_IMPLEMENTED }
|
2022-12-07 17:23:14 +00:00
|
|
|
|
2023-05-11 15:12:46 +00:00
|
|
|
SELECT * FROM t1 JOIN t2 ON NULL SETTINGS join_algorithm = 'full_sorting_merge'; -- { serverError INVALID_JOIN_ON_EXPRESSION,NOT_IMPLEMENTED }
|
|
|
|
SELECT * FROM t1 JOIN t2 ON NULL SETTINGS join_algorithm = 'partial_merge'; -- { serverError INVALID_JOIN_ON_EXPRESSION,NOT_IMPLEMENTED }
|
|
|
|
SELECT * FROM t1 LEFT JOIN t2 ON NULL SETTINGS join_algorithm = 'partial_merge'; -- { serverError INVALID_JOIN_ON_EXPRESSION,NOT_IMPLEMENTED }
|
|
|
|
SELECT * FROM t1 RIGHT JOIN t2 ON NULL SETTINGS join_algorithm = 'auto'; -- { serverError INVALID_JOIN_ON_EXPRESSION,NOT_IMPLEMENTED }
|
|
|
|
SELECT * FROM t1 FULL JOIN t2 ON NULL SETTINGS join_algorithm = 'partial_merge'; -- { serverError INVALID_JOIN_ON_EXPRESSION,NOT_IMPLEMENTED }
|
2022-12-07 17:23:14 +00:00
|
|
|
|
|
|
|
-- mixing of constant and non-constant expressions in ON is not allowed
|
2023-05-11 15:12:46 +00:00
|
|
|
SELECT * FROM t1 JOIN t2 ON t1.id = t2.id AND 1 == 1 SETTINGS allow_experimental_analyzer = 0; -- { serverError AMBIGUOUS_COLUMN_NAME }
|
|
|
|
SELECT * FROM t1 JOIN t2 ON t1.id = t2.id AND 1 == 1 SETTINGS allow_experimental_analyzer = 1;
|
|
|
|
SELECT * FROM t1 JOIN t2 ON t1.id = t2.id AND 1 == 2 SETTINGS allow_experimental_analyzer = 0; -- { serverError AMBIGUOUS_COLUMN_NAME }
|
|
|
|
SELECT * FROM t1 JOIN t2 ON t1.id = t2.id AND 1 == 2 SETTINGS allow_experimental_analyzer = 1;
|
2022-12-07 17:23:14 +00:00
|
|
|
|
2023-05-11 15:12:46 +00:00
|
|
|
SELECT * FROM t1 JOIN t2 ON t1.id = t2.id AND 1 != 1 SETTINGS allow_experimental_analyzer = 0; -- { serverError INVALID_JOIN_ON_EXPRESSION }
|
|
|
|
SELECT * FROM t1 JOIN t2 ON t1.id = t2.id AND 1 != 1 SETTINGS allow_experimental_analyzer = 1;
|
2022-12-07 17:23:14 +00:00
|
|
|
SELECT * FROM t1 JOIN t2 ON t1.id = t2.id AND NULL; -- { serverError INVALID_JOIN_ON_EXPRESSION }
|
2023-05-11 15:12:46 +00:00
|
|
|
SELECT * FROM t1 JOIN t2 ON t1.id = t2.id AND 'aaa'; -- { serverError INVALID_JOIN_ON_EXPRESSION,ILLEGAL_TYPE_OF_ARGUMENT }
|
2022-12-07 17:23:14 +00:00
|
|
|
SELECT * FROM t1 JOIN t2 ON 'aaa'; -- { serverError INVALID_JOIN_ON_EXPRESSION }
|
|
|
|
|
2023-05-11 15:12:46 +00:00
|
|
|
SELECT * FROM t1 JOIN t2 ON t1.id = t2.id AND 0 SETTINGS allow_experimental_analyzer = 0; -- { serverError INVALID_JOIN_ON_EXPRESSION }
|
|
|
|
SELECT * FROM t1 JOIN t2 ON t1.id = t2.id AND 0 SETTINGS allow_experimental_analyzer = 1;
|
|
|
|
SELECT * FROM t1 JOIN t2 ON t1.id = t2.id AND 1 SETTINGS allow_experimental_analyzer = 0; -- { serverError INVALID_JOIN_ON_EXPRESSION }
|
|
|
|
SELECT * FROM t1 JOIN t2 ON t1.id = t2.id AND 1 SETTINGS allow_experimental_analyzer = 1;
|
|
|
|
|
|
|
|
-- { echoOn }
|
|
|
|
SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id AND 1 = 1 SETTINGS allow_experimental_analyzer = 1;
|
|
|
|
SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id AND 1 = 1 SETTINGS allow_experimental_analyzer = 1;
|
|
|
|
SELECT * FROM t1 FULL JOIN t2 ON t1.id = t2.id AND 1 = 1 SETTINGS allow_experimental_analyzer = 1;
|
|
|
|
|
|
|
|
SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id AND 1 = 2 SETTINGS allow_experimental_analyzer = 1;
|
|
|
|
SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id AND 1 = 2 SETTINGS allow_experimental_analyzer = 1;
|
|
|
|
SELECT * FROM t1 FULL JOIN t2 ON t1.id = t2.id AND 1 = 2 SETTINGS allow_experimental_analyzer = 1;
|
|
|
|
|
2023-12-06 11:17:29 +00:00
|
|
|
SELECT * FROM (SELECT 1 as a) as t1 INNER JOIN ( SELECT ('b', 256) as b ) AS t2 ON NULL;
|
|
|
|
SELECT * FROM (SELECT 1 as a) as t1 LEFT JOIN ( SELECT ('b', 256) as b ) AS t2 ON NULL;
|
|
|
|
SELECT * FROM (SELECT 1 as a) as t1 RIGHT JOIN ( SELECT ('b', 256) as b ) AS t2 ON NULL;
|
|
|
|
SELECT * FROM (SELECT 1 as a) as t1 FULL JOIN ( SELECT ('b', 256) as b ) AS t2 ON NULL;
|
|
|
|
SELECT * FROM (SELECT 1 as a) as t1 SEMI JOIN ( SELECT ('b', 256) as b ) AS t2 ON NULL;
|
|
|
|
SELECT * FROM (SELECT 1 as a) as t1 ANTI JOIN ( SELECT ('b', 256) as b ) AS t2 ON NULL;
|
|
|
|
|
2023-05-11 15:12:46 +00:00
|
|
|
-- { echoOff }
|
2021-11-08 12:44:13 +00:00
|
|
|
|
2023-12-08 10:51:53 +00:00
|
|
|
SELECT a + 1
|
|
|
|
FROM (SELECT 1 as x) as t1
|
|
|
|
LEFT JOIN ( SELECT 1 AS a ) AS t2
|
|
|
|
ON TRUE
|
|
|
|
SETTINGS allow_experimental_analyzer=1, join_use_nulls=1;
|
|
|
|
|
|
|
|
SELECT a + 1, x + 1, toTypeName(a), toTypeName(x)
|
|
|
|
FROM (SELECT 1 as x) as t1
|
|
|
|
LEFT JOIN ( SELECT sum(number) as a from numbers(3) GROUP BY NULL) AS t2
|
|
|
|
ON TRUE
|
|
|
|
SETTINGS allow_experimental_analyzer=1, join_use_nulls=1;
|
|
|
|
|
|
|
|
SELECT a + 1, x + 1, toTypeName(a), toTypeName(x)
|
|
|
|
FROM (SELECT 1 as x) as t1
|
|
|
|
RIGHT JOIN ( SELECT sum(number) as a from numbers(3) GROUP BY NULL) AS t2
|
|
|
|
ON TRUE
|
|
|
|
SETTINGS allow_experimental_analyzer=1, join_use_nulls=1;
|
|
|
|
|
|
|
|
SELECT a + 1, x + 1, toTypeName(a), toTypeName(x)
|
|
|
|
FROM (SELECT 1 as x) as t1
|
|
|
|
FULL JOIN ( SELECT sum(number) as a from numbers(3) GROUP BY NULL) AS t2
|
|
|
|
ON TRUE
|
|
|
|
SETTINGS allow_experimental_analyzer=1, join_use_nulls=1;
|
|
|
|
|
|
|
|
|
2021-11-08 12:44:13 +00:00
|
|
|
DROP TABLE IF EXISTS t1;
|
|
|
|
DROP TABLE IF EXISTS t2;
|
|
|
|
|