mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 08:32:02 +00:00
fixed #64513. mixed join condition with function 'in'
This commit is contained in:
parent
bb9091ad5a
commit
8c94832c20
@ -1526,6 +1526,8 @@ JoinTreeQueryPlan buildQueryPlanForJoinNode(const QueryTreeNodePtr & join_table_
|
||||
left_join_tree_query_plan.actions_dags.emplace_back(std::move(join_clauses_and_actions.left_join_expressions_actions));
|
||||
if (join_clauses_and_actions.right_join_expressions_actions)
|
||||
left_join_tree_query_plan.actions_dags.emplace_back(std::move(join_clauses_and_actions.right_join_expressions_actions));
|
||||
if (join_clauses_and_actions.mixed_join_expressions_actions)
|
||||
left_join_tree_query_plan.actions_dags.push_back(join_clauses_and_actions.mixed_join_expressions_actions);
|
||||
|
||||
auto mapping = std::move(left_join_tree_query_plan.query_node_to_plan_step_mapping);
|
||||
auto & r_mapping = right_join_tree_query_plan.query_node_to_plan_step_mapping;
|
||||
|
@ -38,6 +38,17 @@ key4 f 2 3 4 0 0 \N
|
||||
SELECT t1.*, t2.* from t1 LEFT JOIN t2 ON t1.key = t2.key and t1.c ORDER BY (t1.key, t1.attr, t2.key, t2.attr); -- { serverError INVALID_JOIN_ON_EXPRESSION }
|
||||
SELECT * FROM (SELECT 1 AS a, 1 AS b, 1 AS c) AS t1 LEFT JOIN (SELECT 1 AS a, 1 AS b, 1 AS c) AS t2 ON t1.a = t2.a AND (t1.b > 0 OR t2.b > 0);
|
||||
1 1 1 1 1 1
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 3))) ORDER BY t1.key, t2.key;
|
||||
key1 a 1 1 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 A 1 2 1
|
||||
key1 b 2 3 2 key1 B 2 1 2
|
||||
key1 b 2 3 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 D 4 1 6
|
||||
key1 c 3 2 1 key1 C 3 4 5
|
||||
key1 d 4 7 2 key1 C 3 4 5
|
||||
key1 e 5 5 5 key1 C 3 4 5
|
||||
key2 a2 1 1 1 0 0 \N
|
||||
key4 f 2 3 4 key4 F 1 1 1
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON (t1.a < t2.a OR lower(t1.attr) == lower(t2.attr)) AND t1.key = t2.key ORDER BY (t1.key, t1.attr, t2.key, t2.attr);
|
||||
key1 a 1 1 2 key1 A 1 2 1
|
||||
key1 a 1 1 2 key1 B 2 1 2
|
||||
@ -67,6 +78,16 @@ key1 c 3 2 1 key1 D 4 1 6
|
||||
SELECT t1.*, t2.* from t1 INNER JOIN t2 ON t1.key = t2.key and t1.c ORDER BY (t1.key, t1.attr, t2.key, t2.attr); -- { serverError INVALID_JOIN_ON_EXPRESSION }
|
||||
SELECT * FROM (SELECT 1 AS a, 1 AS b, 1 AS c) AS t1 INNER JOIN (SELECT 1 AS a, 1 AS b, 1 AS c) AS t2 ON t1.a = t2.a AND (t1.b > 0 OR t2.b > 0);
|
||||
1 1 1 1 1 1
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 3))) ORDER BY t1.key, t2.key;
|
||||
key1 a 1 1 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 A 1 2 1
|
||||
key1 b 2 3 2 key1 B 2 1 2
|
||||
key1 b 2 3 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 D 4 1 6
|
||||
key1 c 3 2 1 key1 C 3 4 5
|
||||
key1 d 4 7 2 key1 C 3 4 5
|
||||
key1 e 5 5 5 key1 C 3 4 5
|
||||
key4 f 2 3 4 key4 F 1 1 1
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON (t1.a < t2.a OR lower(t1.attr) == lower(t2.attr)) AND t1.key = t2.key ORDER BY (t1.key, t1.attr, t2.key, t2.attr);
|
||||
0 0 \N key3 a3 1 1 1
|
||||
key1 a 1 1 2 key1 A 1 2 1
|
||||
@ -102,6 +123,17 @@ key1 c 3 2 1 key1 D 4 1 6
|
||||
SELECT t1.*, t2.* from t1 RIGHT JOIN t2 ON t1.key = t2.key and t1.c ORDER BY (t1.key, t1.attr, t2.key, t2.attr); -- { serverError INVALID_JOIN_ON_EXPRESSION }
|
||||
SELECT * FROM (SELECT 1 AS a, 1 AS b, 1 AS c) AS t1 RIGHT JOIN (SELECT 1 AS a, 1 AS b, 1 AS c) AS t2 ON t1.a = t2.a AND (t1.b > 0 OR t2.b > 0);
|
||||
1 1 1 1 1 1
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 3))) ORDER BY t1.key, t2.key;
|
||||
0 0 \N key3 a3 1 1 1
|
||||
key1 a 1 1 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 A 1 2 1
|
||||
key1 b 2 3 2 key1 B 2 1 2
|
||||
key1 b 2 3 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 D 4 1 6
|
||||
key1 c 3 2 1 key1 C 3 4 5
|
||||
key1 d 4 7 2 key1 C 3 4 5
|
||||
key1 e 5 5 5 key1 C 3 4 5
|
||||
key4 f 2 3 4 key4 F 1 1 1
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON (t1.a < t2.a OR lower(t1.attr) == lower(t2.attr)) AND t1.key = t2.key ORDER BY (t1.key, t1.attr, t2.key, t2.attr);
|
||||
0 0 \N key3 a3 1 1 1
|
||||
key1 a 1 1 2 key1 A 1 2 1
|
||||
@ -146,6 +178,18 @@ key4 f 2 3 4 0 0 \N
|
||||
SELECT t1.*, t2.* from t1 FULL JOIN t2 ON t1.key = t2.key and t1.c ORDER BY (t1.key, t1.attr, t2.key, t2.attr); -- { serverError INVALID_JOIN_ON_EXPRESSION }
|
||||
SELECT * FROM (SELECT 1 AS a, 1 AS b, 1 AS c) AS t1 FULL JOIN (SELECT 1 AS a, 1 AS b, 1 AS c) AS t2 ON t1.a = t2.a AND (t1.b > 0 OR t2.b > 0);
|
||||
1 1 1 1 1 1
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 3))) ORDER BY t1.key, t2.key;
|
||||
0 0 \N key3 a3 1 1 1
|
||||
key1 a 1 1 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 A 1 2 1
|
||||
key1 b 2 3 2 key1 B 2 1 2
|
||||
key1 b 2 3 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 D 4 1 6
|
||||
key1 c 3 2 1 key1 C 3 4 5
|
||||
key1 d 4 7 2 key1 C 3 4 5
|
||||
key1 e 5 5 5 key1 C 3 4 5
|
||||
key2 a2 1 1 1 0 0 \N
|
||||
key4 f 2 3 4 key4 F 1 1 1
|
||||
SET join_algorithm='grace_hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON (t1.a < t2.a OR lower(t1.attr) == lower(t2.attr)) AND t1.key = t2.key ORDER BY (t1.key, t1.attr, t2.key, t2.attr);
|
||||
key1 a 1 1 2 key1 A 1 2 1
|
||||
@ -185,6 +229,17 @@ key4 f 2 3 4 0 0 \N
|
||||
SELECT t1.*, t2.* from t1 LEFT JOIN t2 ON t1.key = t2.key and t1.c ORDER BY (t1.key, t1.attr, t2.key, t2.attr); -- { serverError INVALID_JOIN_ON_EXPRESSION }
|
||||
SELECT * FROM (SELECT 1 AS a, 1 AS b, 1 AS c) AS t1 LEFT JOIN (SELECT 1 AS a, 1 AS b, 1 AS c) AS t2 ON t1.a = t2.a AND (t1.b > 0 OR t2.b > 0);
|
||||
1 1 1 1 1 1
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 3))) ORDER BY t1.key, t2.key;
|
||||
key1 a 1 1 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 A 1 2 1
|
||||
key1 b 2 3 2 key1 B 2 1 2
|
||||
key1 b 2 3 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 D 4 1 6
|
||||
key1 c 3 2 1 key1 C 3 4 5
|
||||
key1 d 4 7 2 key1 C 3 4 5
|
||||
key1 e 5 5 5 key1 C 3 4 5
|
||||
key2 a2 1 1 1 0 0 \N
|
||||
key4 f 2 3 4 key4 F 1 1 1
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON (t1.a < t2.a OR lower(t1.attr) == lower(t2.attr)) AND t1.key = t2.key ORDER BY (t1.key, t1.attr, t2.key, t2.attr);
|
||||
key1 a 1 1 2 key1 A 1 2 1
|
||||
key1 a 1 1 2 key1 B 2 1 2
|
||||
@ -214,6 +269,16 @@ key1 c 3 2 1 key1 D 4 1 6
|
||||
SELECT t1.*, t2.* from t1 INNER JOIN t2 ON t1.key = t2.key and t1.c ORDER BY (t1.key, t1.attr, t2.key, t2.attr); -- { serverError INVALID_JOIN_ON_EXPRESSION }
|
||||
SELECT * FROM (SELECT 1 AS a, 1 AS b, 1 AS c) AS t1 INNER JOIN (SELECT 1 AS a, 1 AS b, 1 AS c) AS t2 ON t1.a = t2.a AND (t1.b > 0 OR t2.b > 0);
|
||||
1 1 1 1 1 1
|
||||
SELECT t1.*, t2.* FROM t1 INNER JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 3))) ORDER BY t1.key, t2.key;
|
||||
key1 a 1 1 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 A 1 2 1
|
||||
key1 b 2 3 2 key1 B 2 1 2
|
||||
key1 b 2 3 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 D 4 1 6
|
||||
key1 c 3 2 1 key1 C 3 4 5
|
||||
key1 d 4 7 2 key1 C 3 4 5
|
||||
key1 e 5 5 5 key1 C 3 4 5
|
||||
key4 f 2 3 4 key4 F 1 1 1
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON (t1.a < t2.a OR lower(t1.attr) == lower(t2.attr)) AND t1.key = t2.key ORDER BY (t1.key, t1.attr, t2.key, t2.attr);
|
||||
0 0 \N key3 a3 1 1 1
|
||||
key1 a 1 1 2 key1 A 1 2 1
|
||||
@ -249,6 +314,17 @@ key1 c 3 2 1 key1 D 4 1 6
|
||||
SELECT t1.*, t2.* from t1 RIGHT JOIN t2 ON t1.key = t2.key and t1.c ORDER BY (t1.key, t1.attr, t2.key, t2.attr); -- { serverError INVALID_JOIN_ON_EXPRESSION }
|
||||
SELECT * FROM (SELECT 1 AS a, 1 AS b, 1 AS c) AS t1 RIGHT JOIN (SELECT 1 AS a, 1 AS b, 1 AS c) AS t2 ON t1.a = t2.a AND (t1.b > 0 OR t2.b > 0);
|
||||
1 1 1 1 1 1
|
||||
SELECT t1.*, t2.* FROM t1 RIGHT JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 3))) ORDER BY t1.key, t2.key;
|
||||
0 0 \N key3 a3 1 1 1
|
||||
key1 a 1 1 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 A 1 2 1
|
||||
key1 b 2 3 2 key1 B 2 1 2
|
||||
key1 b 2 3 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 D 4 1 6
|
||||
key1 c 3 2 1 key1 C 3 4 5
|
||||
key1 d 4 7 2 key1 C 3 4 5
|
||||
key1 e 5 5 5 key1 C 3 4 5
|
||||
key4 f 2 3 4 key4 F 1 1 1
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON (t1.a < t2.a OR lower(t1.attr) == lower(t2.attr)) AND t1.key = t2.key ORDER BY (t1.key, t1.attr, t2.key, t2.attr);
|
||||
0 0 \N key3 a3 1 1 1
|
||||
key1 a 1 1 2 key1 A 1 2 1
|
||||
@ -293,6 +369,18 @@ key4 f 2 3 4 0 0 \N
|
||||
SELECT t1.*, t2.* from t1 FULL JOIN t2 ON t1.key = t2.key and t1.c ORDER BY (t1.key, t1.attr, t2.key, t2.attr); -- { serverError INVALID_JOIN_ON_EXPRESSION }
|
||||
SELECT * FROM (SELECT 1 AS a, 1 AS b, 1 AS c) AS t1 FULL JOIN (SELECT 1 AS a, 1 AS b, 1 AS c) AS t2 ON t1.a = t2.a AND (t1.b > 0 OR t2.b > 0);
|
||||
1 1 1 1 1 1
|
||||
SELECT t1.*, t2.* FROM t1 FULL JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 3))) ORDER BY t1.key, t2.key;
|
||||
0 0 \N key3 a3 1 1 1
|
||||
key1 a 1 1 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 A 1 2 1
|
||||
key1 b 2 3 2 key1 B 2 1 2
|
||||
key1 b 2 3 2 key1 C 3 4 5
|
||||
key1 b 2 3 2 key1 D 4 1 6
|
||||
key1 c 3 2 1 key1 C 3 4 5
|
||||
key1 d 4 7 2 key1 C 3 4 5
|
||||
key1 e 5 5 5 key1 C 3 4 5
|
||||
key2 a2 1 1 1 0 0 \N
|
||||
key4 f 2 3 4 key4 F 1 1 1
|
||||
SET join_algorithm='hash';
|
||||
SELECT t1.*, t2.* FROM t1 LEFT JOIN t2 ON t1.key = t2.key AND t1.a < t2.a OR t1.a = t2.a ORDER BY (t1.key, t1.attr, t2.key, t2.attr);
|
||||
key1 a 1 1 2 key1 A 1 2 1
|
||||
|
@ -18,6 +18,7 @@ SELECT t1.*, t2.* from t1 {{ join_type }} JOIN t2 ON t1.key = t2.key and (t1.b +
|
||||
SELECT t1.*, t2.* from t1 {{ join_type }} JOIN t2 ON t1.key = t2.key and (t1.a < t2.a) ORDER BY (t1.key, t1.attr, t2.key, t2.attr);
|
||||
SELECT t1.*, t2.* from t1 {{ join_type }} JOIN t2 ON t1.key = t2.key and t1.c ORDER BY (t1.key, t1.attr, t2.key, t2.attr); -- { serverError INVALID_JOIN_ON_EXPRESSION }
|
||||
SELECT * FROM (SELECT 1 AS a, 1 AS b, 1 AS c) AS t1 {{ join_type }} JOIN (SELECT 1 AS a, 1 AS b, 1 AS c) AS t2 ON t1.a = t2.a AND (t1.b > 0 OR t2.b > 0);
|
||||
SELECT t1.*, t2.* FROM t1 {{ join_type }} JOIN t2 ON t1.key = t2.key AND (t1.a=2 OR (t2.a IN (SELECT a FROM t1 WHERE a = 3))) ORDER BY t1.key, t2.key;
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user