mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-17 13:13:36 +00:00
Correct cardinality in MergeJoin (same as in input)
This commit is contained in:
parent
d266050b23
commit
80466427ad
@ -464,6 +464,12 @@ MergeJoin::MergeJoin(std::shared_ptr<TableJoin> table_join_, const Block & right
|
||||
ErrorCodes::PARAMETER_OUT_OF_BOUND);
|
||||
}
|
||||
|
||||
for (const auto & right_key : table_join->keyNamesRight())
|
||||
{
|
||||
if (right_sample_block.getByName(right_key).type->lowCardinality())
|
||||
lowcard_right_keys.push_back(right_key);
|
||||
}
|
||||
|
||||
table_join->splitAdditionalColumns(right_sample_block, right_table_keys, right_columns_to_add);
|
||||
JoinCommon::removeLowCardinalityInplace(right_table_keys);
|
||||
JoinCommon::removeLowCardinalityInplace(right_sample_block, table_join->keyNamesRight());
|
||||
@ -607,10 +613,18 @@ bool MergeJoin::addJoinedBlock(const Block & src_block, bool)
|
||||
|
||||
void MergeJoin::joinBlock(Block & block, ExtraBlockPtr & not_processed)
|
||||
{
|
||||
Names lowcard_keys = lowcard_right_keys;
|
||||
if (block)
|
||||
{
|
||||
JoinCommon::checkTypesOfKeys(block, table_join->keyNamesLeft(), right_table_keys, table_join->keyNamesRight());
|
||||
materializeBlockInplace(block);
|
||||
|
||||
for (const auto & column_name : table_join->keyNamesLeft())
|
||||
{
|
||||
if (block.getByName(column_name).type->lowCardinality())
|
||||
lowcard_keys.push_back(column_name);
|
||||
}
|
||||
|
||||
JoinCommon::removeLowCardinalityInplace(block, table_join->keyNamesLeft(), false);
|
||||
|
||||
sortBlock(block, left_sort_description);
|
||||
@ -646,14 +660,20 @@ void MergeJoin::joinBlock(Block & block, ExtraBlockPtr & not_processed)
|
||||
if (!not_processed && left_blocks_buffer)
|
||||
not_processed = std::make_shared<NotProcessed>(NotProcessed{{}, 0, 0, 0});
|
||||
|
||||
for (const auto & column_name : lowcard_keys)
|
||||
{
|
||||
if (!block.has(column_name))
|
||||
continue;
|
||||
if (auto & col = block.getByName(column_name); !col.type->lowCardinality())
|
||||
JoinCommon::changeLowCardinalityInplace(col);
|
||||
}
|
||||
|
||||
JoinCommon::restoreLowCardinalityInplace(block);
|
||||
}
|
||||
|
||||
template <bool in_memory, bool is_all>
|
||||
void MergeJoin::joinSortedBlock(Block & block, ExtraBlockPtr & not_processed)
|
||||
{
|
||||
//std::shared_lock lock(rwlock);
|
||||
|
||||
size_t rows_to_reserve = is_left ? block.rows() : 0;
|
||||
MutableColumns left_columns = makeMutableColumns(block, (is_all ? rows_to_reserve : 0));
|
||||
MutableColumns right_columns = makeMutableColumns(right_columns_to_add, rows_to_reserve);
|
||||
@ -702,7 +722,6 @@ void MergeJoin::joinSortedBlock(Block & block, ExtraBlockPtr & not_processed)
|
||||
|
||||
left_cursor.nextN(left_key_tail);
|
||||
joinInequalsLeft<is_all>(block, left_columns, right_columns_to_add, right_columns, left_cursor.position(), left_cursor.end());
|
||||
//left_cursor.nextN(left_cursor.end() - left_cursor.position());
|
||||
|
||||
changeLeftColumns(block, std::move(left_columns));
|
||||
addRightColumns(block, std::move(right_columns));
|
||||
|
@ -103,6 +103,8 @@ private:
|
||||
const size_t max_rows_in_right_block;
|
||||
const size_t max_files_to_merge;
|
||||
|
||||
Names lowcard_right_keys;
|
||||
|
||||
void changeLeftColumns(Block & block, MutableColumns && columns) const;
|
||||
void addRightColumns(Block & block, MutableColumns && columns);
|
||||
|
||||
|
@ -199,3 +199,204 @@ LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N Nullable
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str Nullable(String) Nullable(String) str str
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N Nullable(String) Nullable(String) str_l str_l
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||
str LowCardinality(String)
|
||||
LowCardinality(String)
|
||||
str_r LowCardinality(String)
|
||||
str LowCardinality(String)
|
||||
str LowCardinality(String)
|
||||
LowCardinality(String)
|
||||
str_l LowCardinality(String)
|
||||
str_r LowCardinality(String)
|
||||
str LowCardinality(String)
|
||||
str_l LowCardinality(String)
|
||||
LowCardinality(String) LowCardinality(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||
LowCardinality(String) LowCardinality(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||
LowCardinality(String) LowCardinality(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||
LowCardinality(String) LowCardinality(String) LowCardinality(String) LowCardinality(String) str_l str_l
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||
LowCardinality(String) LowCardinality(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||
LowCardinality(String) LowCardinality(String) LowCardinality(String) LowCardinality(String) str_l str_l
|
||||
str LowCardinality(String)
|
||||
LowCardinality(String)
|
||||
str_r LowCardinality(String)
|
||||
str LowCardinality(String)
|
||||
str LowCardinality(String)
|
||||
LowCardinality(String)
|
||||
str_l LowCardinality(String)
|
||||
str_r LowCardinality(String)
|
||||
str LowCardinality(String)
|
||||
str_l LowCardinality(String)
|
||||
String String str str LowCardinality(String) LowCardinality(String) str str
|
||||
String String str_r str_r LowCardinality(String) LowCardinality(String)
|
||||
String String str_r str_r LowCardinality(String) LowCardinality(String)
|
||||
String String str str LowCardinality(String) LowCardinality(String) str str
|
||||
String String str str LowCardinality(String) LowCardinality(String) str str
|
||||
String String str_r str_r LowCardinality(String) LowCardinality(String)
|
||||
String String LowCardinality(String) LowCardinality(String) str_l str_l
|
||||
String String str_r str_r LowCardinality(String) LowCardinality(String)
|
||||
String String str str LowCardinality(String) LowCardinality(String) str str
|
||||
String String LowCardinality(String) LowCardinality(String) str_l str_l
|
||||
str String
|
||||
String
|
||||
str_r String
|
||||
str String
|
||||
str String
|
||||
String
|
||||
str_l String
|
||||
str_r String
|
||||
str String
|
||||
str_l String
|
||||
LowCardinality(String) LowCardinality(String) str str String String str str
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r String String
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r String String
|
||||
LowCardinality(String) LowCardinality(String) str str String String str str
|
||||
LowCardinality(String) LowCardinality(String) str str String String str str
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r String String
|
||||
LowCardinality(String) LowCardinality(String) String String str_l str_l
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r String String
|
||||
LowCardinality(String) LowCardinality(String) str str String String str str
|
||||
LowCardinality(String) LowCardinality(String) String String str_l str_l
|
||||
str LowCardinality(String)
|
||||
LowCardinality(String)
|
||||
str_r LowCardinality(String)
|
||||
str LowCardinality(String)
|
||||
str LowCardinality(String)
|
||||
LowCardinality(String)
|
||||
str_l LowCardinality(String)
|
||||
str_r LowCardinality(String)
|
||||
str LowCardinality(String)
|
||||
str_l LowCardinality(String)
|
||||
Nullable(String) Nullable(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||
Nullable(String) Nullable(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||
Nullable(String) Nullable(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||
Nullable(String) Nullable(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||
Nullable(String) Nullable(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||
Nullable(String) Nullable(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||
Nullable(String) Nullable(String) \N \N LowCardinality(String) LowCardinality(String) str_l str_l
|
||||
Nullable(String) Nullable(String) str_r str_r LowCardinality(String) LowCardinality(String)
|
||||
Nullable(String) Nullable(String) str str LowCardinality(String) LowCardinality(String) str str
|
||||
Nullable(String) Nullable(String) \N \N LowCardinality(String) LowCardinality(String) str_l str_l
|
||||
str Nullable(String)
|
||||
\N Nullable(String)
|
||||
str Nullable(String)
|
||||
str_r Nullable(String)
|
||||
str Nullable(String)
|
||||
\N Nullable(String)
|
||||
str_l Nullable(String)
|
||||
str Nullable(String)
|
||||
str_l Nullable(String)
|
||||
str_r Nullable(String)
|
||||
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||
LowCardinality(String) LowCardinality(String) Nullable(String) Nullable(String) str_l str_l
|
||||
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||
LowCardinality(String) LowCardinality(String) Nullable(String) Nullable(String) str_l str_l
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||
-- join_use_nulls --
|
||||
str LowCardinality(Nullable(String))
|
||||
\N LowCardinality(Nullable(String))
|
||||
str LowCardinality(Nullable(String))
|
||||
str_r LowCardinality(Nullable(String))
|
||||
str LowCardinality(Nullable(String))
|
||||
\N LowCardinality(Nullable(String))
|
||||
str_l LowCardinality(Nullable(String))
|
||||
str LowCardinality(Nullable(String))
|
||||
str_l LowCardinality(Nullable(String))
|
||||
str_r LowCardinality(Nullable(String))
|
||||
LowCardinality(String) LowCardinality(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||
LowCardinality(String) LowCardinality(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_l str_l
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_l str_l
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||
str LowCardinality(Nullable(String))
|
||||
\N LowCardinality(Nullable(String))
|
||||
str LowCardinality(Nullable(String))
|
||||
str_r LowCardinality(Nullable(String))
|
||||
str LowCardinality(Nullable(String))
|
||||
\N LowCardinality(Nullable(String))
|
||||
str_l LowCardinality(Nullable(String))
|
||||
str LowCardinality(Nullable(String))
|
||||
str_l LowCardinality(Nullable(String))
|
||||
str_r LowCardinality(Nullable(String))
|
||||
String String str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||
String String str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||
String String str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||
String String str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||
Nullable(String) Nullable(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||
Nullable(String) Nullable(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||
Nullable(String) Nullable(String) \N \N LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_l str_l
|
||||
Nullable(String) Nullable(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||
Nullable(String) Nullable(String) \N \N LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_l str_l
|
||||
Nullable(String) Nullable(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||
str Nullable(String)
|
||||
\N Nullable(String)
|
||||
str Nullable(String)
|
||||
str_r Nullable(String)
|
||||
str Nullable(String)
|
||||
\N Nullable(String)
|
||||
str_l Nullable(String)
|
||||
str Nullable(String)
|
||||
str_l Nullable(String)
|
||||
str_r Nullable(String)
|
||||
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str Nullable(String) Nullable(String) str str
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N Nullable(String) Nullable(String) str_l str_l
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str Nullable(String) Nullable(String) str str
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N Nullable(String) Nullable(String) str_l str_l
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||
str LowCardinality(Nullable(String))
|
||||
\N LowCardinality(Nullable(String))
|
||||
str LowCardinality(Nullable(String))
|
||||
str_r LowCardinality(Nullable(String))
|
||||
str LowCardinality(Nullable(String))
|
||||
\N LowCardinality(Nullable(String))
|
||||
str_l LowCardinality(Nullable(String))
|
||||
str LowCardinality(Nullable(String))
|
||||
str_l LowCardinality(Nullable(String))
|
||||
str_r LowCardinality(Nullable(String))
|
||||
Nullable(String) Nullable(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||
Nullable(String) Nullable(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||
Nullable(String) Nullable(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||
Nullable(String) Nullable(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||
Nullable(String) Nullable(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||
Nullable(String) Nullable(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||
Nullable(String) Nullable(String) \N \N LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_l str_l
|
||||
Nullable(String) Nullable(String) str str LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str
|
||||
Nullable(String) Nullable(String) \N \N LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_l str_l
|
||||
Nullable(String) Nullable(String) str_r str_r LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N
|
||||
str Nullable(String)
|
||||
\N Nullable(String)
|
||||
str Nullable(String)
|
||||
str_r Nullable(String)
|
||||
str Nullable(String)
|
||||
\N Nullable(String)
|
||||
str_l Nullable(String)
|
||||
str Nullable(String)
|
||||
str_l Nullable(String)
|
||||
str_r Nullable(String)
|
||||
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||
LowCardinality(String) LowCardinality(String) str str Nullable(String) Nullable(String) str str
|
||||
LowCardinality(String) LowCardinality(String) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str Nullable(String) Nullable(String) str str
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N Nullable(String) Nullable(String) str_l str_l
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str str Nullable(String) Nullable(String) str str
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) \N \N Nullable(String) Nullable(String) str_l str_l
|
||||
LowCardinality(Nullable(String)) LowCardinality(Nullable(String)) str_r str_r Nullable(String) Nullable(String) \N \N
|
||||
|
@ -20,6 +20,135 @@ INSERT INTO l VALUES (0, 'str'), (2, 'str_l');
|
||||
INSERT INTO nl VALUES (0, 'str'), (2, 'str_l');
|
||||
INSERT INTO l_lc VALUES (0, 'str'), (2, 'str_l');
|
||||
|
||||
|
||||
SET join_use_nulls = 0;
|
||||
|
||||
--
|
||||
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
|
||||
--
|
||||
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r USING (lc) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r USING (lc) ORDER BY x;
|
||||
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r USING (lc) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r USING (lc) ORDER BY x;
|
||||
|
||||
--
|
||||
|
||||
SELECT lc, toTypeName(lc) FROM l RIGHT JOIN r USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l RIGHT JOIN r USING (lc) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l FULL JOIN r USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l FULL JOIN r USING (lc) ORDER BY x;
|
||||
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
|
||||
--
|
||||
|
||||
SELECT lc, toTypeName(lc) FROM l_lc RIGHT JOIN nr USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc RIGHT JOIN nr USING (lc) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc FULL JOIN nr USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc FULL JOIN nr USING (lc) ORDER BY x;
|
||||
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN nr AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN nr AS r USING (lc) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN nr AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN nr AS r USING (lc) ORDER BY x;
|
||||
|
||||
--
|
||||
|
||||
SELECT lc, toTypeName(lc) FROM nl RIGHT JOIN r_lc USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM nl RIGHT JOIN r_lc USING (lc) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM nl FULL JOIN r_lc USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM nl FULL JOIN r_lc USING (lc) ORDER BY x;
|
||||
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
|
||||
SELECT '-- join_use_nulls --';
|
||||
|
||||
SET join_use_nulls = 1;
|
||||
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
|
||||
--
|
||||
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r USING (lc) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l FULL JOIN r USING (lc) ORDER BY x;
|
||||
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN r USING (lc) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN r USING (lc) ORDER BY x;
|
||||
|
||||
--
|
||||
|
||||
SELECT lc, toTypeName(lc) FROM l RIGHT JOIN r USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l RIGHT JOIN r USING (lc) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l FULL JOIN r USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l FULL JOIN r USING (lc) ORDER BY x;
|
||||
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
|
||||
--
|
||||
|
||||
SELECT lc, toTypeName(lc) FROM l_lc RIGHT JOIN nr USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc RIGHT JOIN nr USING (lc) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc FULL JOIN nr USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM l_lc FULL JOIN nr USING (lc) ORDER BY x;
|
||||
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN nr AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l RIGHT JOIN nr AS r USING (lc) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN nr AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM l_lc AS l FULL JOIN nr AS r USING (lc) ORDER BY x;
|
||||
|
||||
--
|
||||
|
||||
SELECT lc, toTypeName(lc) FROM nl RIGHT JOIN r_lc USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM nl RIGHT JOIN r_lc USING (lc) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM nl FULL JOIN r_lc USING (x) ORDER BY x;
|
||||
SELECT lc, toTypeName(lc) FROM nl FULL JOIN r_lc USING (lc) ORDER BY x;
|
||||
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l RIGHT JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l FULL JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
SELECT toTypeName(r.lc), toTypeName(materialize(r.lc)), r.lc, materialize(r.lc), toTypeName(l.lc), toTypeName(materialize(l.lc)), l.lc, materialize(l.lc) FROM nl AS l FULL JOIN r_lc AS r USING (lc) ORDER BY x;
|
||||
|
||||
set join_algorithm = 'partial_merge';
|
||||
|
||||
SET join_use_nulls = 0;
|
||||
|
||||
--
|
||||
|
||||
SELECT lc, toTypeName(lc) FROM l_lc AS l RIGHT JOIN r_lc AS r USING (x) ORDER BY x;
|
||||
|
Loading…
Reference in New Issue
Block a user