420 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			420 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ***************   Case 1   ***************
 | |
| 
 | |
| SQL: merge into targetTable using sourceTable on (targetTable.id = sourceTable.id) when matched then update set targetTable.sales = sourceTable.sales; 
 | |
| 
 | |
| =================================================
 | |
| |ID|OPERATOR         |NAME       |EST. ROWS|COST|
 | |
| -------------------------------------------------
 | |
| |0 |MERGE            |           |810      |810 |
 | |
| |1 | MERGE OUTER JOIN|           |810      |688 |
 | |
| |2 |  TABLE SCAN     |sourceTable|100      |90  |
 | |
| |3 |  TABLE SCAN     |targetTable|100      |90  |
 | |
| =================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([1]), filter(nil), 
 | |
|       columns([targetTable.id], [targetTable.sales]), partitions(nil), update([targetTable.sales=column_conv(INT,PS:(11,0),NULL,sourceTable.sales)]), 
 | |
|       match_conds([targetTable.id = sourceTable.id]), insert_conds(nil), 
 | |
|       update_conds(nil), delete_conds(nil)
 | |
|   1 - output([sourceTable.sales], [column_conv(INT,PS:(11,0),NULL,sourceTable.sales)], [targetTable.id = sourceTable.id], [targetTable.id]), filter(nil), 
 | |
|       equal_conds([targetTable.id = sourceTable.id]), other_conds(nil)
 | |
|   2 - output([sourceTable.id], [sourceTable.sales]), filter(nil), 
 | |
|       access([sourceTable.id], [sourceTable.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([sourceTable.id]), range(MIN ; MAX)always true
 | |
|   3 - output([targetTable.id], [targetTable.sales]), filter(nil), 
 | |
|       access([targetTable.id], [targetTable.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([targetTable.id]), range(MIN ; MAX)always true
 | |
| 
 | |
| *************** Case 1(end)  ************** 
 | |
| 
 | |
| ***************   Case 2   ***************
 | |
| 
 | |
| SQL: merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id) when not matched then insert(t1.id, t1.sales) values(t2.id, t2.sales); 
 | |
| 
 | |
| ==========================================
 | |
| |ID|OPERATOR         |NAME|EST. ROWS|COST|
 | |
| ------------------------------------------
 | |
| |0 |MERGE            |    |810      |810 |
 | |
| |1 | MERGE OUTER JOIN|    |810      |688 |
 | |
| |2 |  TABLE SCAN     |t2  |100      |90  |
 | |
| |3 |  TABLE SCAN     |t1  |100      |90  |
 | |
| ==========================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([column_conv(INT,PS:(11,0),NOT NULL,t2.id)], [column_conv(INT,PS:(11,0),NULL,t2.sales)]), filter(nil), 
 | |
|       columns([t1.id], [t1.sales]), partitions(nil), 
 | |
|       match_conds([t1.id = t2.id]), insert_conds(nil), 
 | |
|       update_conds(nil), delete_conds(nil)
 | |
|   1 - output([t2.id], [column_conv(INT,PS:(11,0),NOT NULL,t2.id)], [t2.sales], [column_conv(INT,PS:(11,0),NULL,t2.sales)], [t1.id = t2.id], [t1.id]), filter(nil), 
 | |
|       equal_conds([t1.id = t2.id]), other_conds(nil)
 | |
|   2 - output([t2.id], [t2.sales]), filter(nil), 
 | |
|       access([t2.id], [t2.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t2.id]), range(MIN ; MAX)always true
 | |
|   3 - output([t1.id], [t1.sales]), filter(nil), 
 | |
|       access([t1.id], [t1.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.id]), range(MIN ; MAX)always true
 | |
| 
 | |
| *************** Case 2(end)  ************** 
 | |
| 
 | |
| ***************   Case 3   ***************
 | |
| 
 | |
| SQL: merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id and t1.id != t2.sales) when matched then update set t1.sales = t2.sales; 
 | |
| 
 | |
| ==========================================
 | |
| |ID|OPERATOR         |NAME|EST. ROWS|COST|
 | |
| ------------------------------------------
 | |
| |0 |MERGE            |    |405      |405 |
 | |
| |1 | MERGE OUTER JOIN|    |405      |549 |
 | |
| |2 |  TABLE SCAN     |t2  |100      |90  |
 | |
| |3 |  TABLE SCAN     |t1  |100      |90  |
 | |
| ==========================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([1]), filter(nil), 
 | |
|       columns([t1.id], [t1.sales]), partitions(nil), update([t1.sales=column_conv(INT,PS:(11,0),NULL,t2.sales)]), 
 | |
|       match_conds([t1.id = t2.id], [t1.id != t2.sales]), insert_conds(nil), 
 | |
|       update_conds(nil), delete_conds(nil)
 | |
|   1 - output([t2.sales], [column_conv(INT,PS:(11,0),NULL,t2.sales)], [t1.id = t2.id], [t1.id != t2.sales], [t1.id]), filter(nil), 
 | |
|       equal_conds([t1.id = t2.id]), other_conds([t1.id != t2.sales])
 | |
|   2 - output([t2.id], [t2.sales]), filter(nil), 
 | |
|       access([t2.id], [t2.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t2.id]), range(MIN ; MAX)always true
 | |
|   3 - output([t1.id], [t1.sales]), filter(nil), 
 | |
|       access([t1.id], [t1.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.id]), range(MIN ; MAX)always true
 | |
| 
 | |
| *************** Case 3(end)  ************** 
 | |
| 
 | |
| ***************   Case 4   ***************
 | |
| 
 | |
| SQL: merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id and t1.id != t2.sales) when matched then update set t1.sales = t2.sales where t1.sales > 1; 
 | |
| 
 | |
| ==========================================
 | |
| |ID|OPERATOR         |NAME|EST. ROWS|COST|
 | |
| ------------------------------------------
 | |
| |0 |MERGE            |    |405      |405 |
 | |
| |1 | MERGE OUTER JOIN|    |405      |549 |
 | |
| |2 |  TABLE SCAN     |t2  |100      |90  |
 | |
| |3 |  TABLE SCAN     |t1  |100      |90  |
 | |
| ==========================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([1]), filter(nil), 
 | |
|       columns([t1.id], [t1.sales]), partitions(nil), update([t1.sales=column_conv(INT,PS:(11,0),NULL,t2.sales)]), 
 | |
|       match_conds([t1.id = t2.id], [t1.id != t2.sales]), insert_conds(nil), 
 | |
|       update_conds([t1.sales > 1]), delete_conds(nil)
 | |
|   1 - output([t2.sales], [column_conv(INT,PS:(11,0),NULL,t2.sales)], [t1.id = t2.id], [t1.id != t2.sales], [t1.sales > 1], [t1.id]), filter(nil), 
 | |
|       equal_conds([t1.id = t2.id]), other_conds([t1.id != t2.sales])
 | |
|   2 - output([t2.id], [t2.sales]), filter(nil), 
 | |
|       access([t2.id], [t2.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t2.id]), range(MIN ; MAX)always true
 | |
|   3 - output([t1.id], [t1.sales]), filter(nil), 
 | |
|       access([t1.id], [t1.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.id]), range(MIN ; MAX)always true
 | |
| 
 | |
| *************** Case 4(end)  ************** 
 | |
| 
 | |
| ***************   Case 5   ***************
 | |
| 
 | |
| SQL: merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id and t1.id != t2.sales) when matched then update set t1.sales = t2.sales where t1.sales > 88 delete where t1.id < 99; 
 | |
| 
 | |
| ==========================================
 | |
| |ID|OPERATOR         |NAME|EST. ROWS|COST|
 | |
| ------------------------------------------
 | |
| |0 |MERGE            |    |405      |405 |
 | |
| |1 | MERGE OUTER JOIN|    |405      |549 |
 | |
| |2 |  TABLE SCAN     |t2  |100      |90  |
 | |
| |3 |  TABLE SCAN     |t1  |100      |90  |
 | |
| ==========================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([1]), filter(nil), 
 | |
|       columns([t1.id], [t1.sales]), partitions(nil), update([t1.sales=column_conv(INT,PS:(11,0),NULL,t2.sales)]), 
 | |
|       match_conds([t1.id = t2.id], [t1.id != t2.sales]), insert_conds(nil), 
 | |
|       update_conds([t1.sales > 88]), delete_conds([t1.id < 99])
 | |
|   1 - output([t2.sales], [column_conv(INT,PS:(11,0),NULL,t2.sales)], [t1.id = t2.id], [t1.id != t2.sales], [t1.sales > 88], [t1.id]), filter(nil), 
 | |
|       equal_conds([t1.id = t2.id]), other_conds([t1.id != t2.sales])
 | |
|   2 - output([t2.id], [t2.sales]), filter(nil), 
 | |
|       access([t2.id], [t2.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t2.id]), range(MIN ; MAX)always true
 | |
|   3 - output([t1.id], [t1.sales]), filter(nil), 
 | |
|       access([t1.id], [t1.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.id]), range(MIN ; MAX)always true
 | |
| 
 | |
| *************** Case 5(end)  ************** 
 | |
| 
 | |
| ***************   Case 6   ***************
 | |
| 
 | |
| SQL: merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id) when not matched then insert(t1.id, t1.sales) values(t2.id, t2.sales) where t2.id > 0; 
 | |
| 
 | |
| ==========================================
 | |
| |ID|OPERATOR         |NAME|EST. ROWS|COST|
 | |
| ------------------------------------------
 | |
| |0 |MERGE            |    |810      |810 |
 | |
| |1 | MERGE OUTER JOIN|    |810      |688 |
 | |
| |2 |  TABLE SCAN     |t2  |100      |90  |
 | |
| |3 |  TABLE SCAN     |t1  |100      |90  |
 | |
| ==========================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([column_conv(INT,PS:(11,0),NOT NULL,t2.id)], [column_conv(INT,PS:(11,0),NULL,t2.sales)]), filter(nil), 
 | |
|       columns([t1.id], [t1.sales]), partitions(nil), 
 | |
|       match_conds([t1.id = t2.id]), insert_conds([t2.id > 0]), 
 | |
|       update_conds(nil), delete_conds(nil)
 | |
|   1 - output([t2.id], [column_conv(INT,PS:(11,0),NOT NULL,t2.id)], [t2.sales], [column_conv(INT,PS:(11,0),NULL,t2.sales)], [t1.id = t2.id], [t2.id > 0], [t1.id]), filter(nil), 
 | |
|       equal_conds([t1.id = t2.id]), other_conds(nil)
 | |
|   2 - output([t2.id], [t2.sales]), filter(nil), 
 | |
|       access([t2.id], [t2.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t2.id]), range(MIN ; MAX)always true
 | |
|   3 - output([t1.id], [t1.sales]), filter(nil), 
 | |
|       access([t1.id], [t1.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.id]), range(MIN ; MAX)always true
 | |
| 
 | |
| *************** Case 6(end)  ************** 
 | |
| 
 | |
| ***************   Case 7   ***************
 | |
| 
 | |
| SQL: merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id) when matched then update set t1.sales = t2.sales where t1.id = 999 delete where t1.sales =888 when not matched then insert(t1.id, t1.sales) values(t2.id, t2.sales) where t2.id = 777; 
 | |
| 
 | |
| ==========================================
 | |
| |ID|OPERATOR         |NAME|EST. ROWS|COST|
 | |
| ------------------------------------------
 | |
| |0 |MERGE            |    |810      |810 |
 | |
| |1 | MERGE OUTER JOIN|    |810      |688 |
 | |
| |2 |  TABLE SCAN     |t2  |100      |90  |
 | |
| |3 |  TABLE SCAN     |t1  |100      |90  |
 | |
| ==========================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([column_conv(INT,PS:(11,0),NOT NULL,t2.id)], [column_conv(INT,PS:(11,0),NULL,t2.sales)]), filter(nil), 
 | |
|       columns([t1.id], [t1.sales]), partitions(nil), update([t1.sales=column_conv(INT,PS:(11,0),NULL,t2.sales)]), 
 | |
|       match_conds([t1.id = t2.id]), insert_conds([t2.id = 777]), 
 | |
|       update_conds([t1.id = 999]), delete_conds([t1.sales = 888])
 | |
|   1 - output([t2.id], [column_conv(INT,PS:(11,0),NOT NULL,t2.id)], [t2.sales], [column_conv(INT,PS:(11,0),NULL,t2.sales)], [column_conv(INT,PS:(11,0),NULL,t2.sales)], [t1.id = t2.id], [t2.id = 777], [t1.id = 999], [t1.sales], [t1.id]), filter(nil), 
 | |
|       equal_conds([t1.id = t2.id]), other_conds(nil)
 | |
|   2 - output([t2.id], [t2.sales]), filter(nil), 
 | |
|       access([t2.id], [t2.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t2.id]), range(MIN ; MAX)always true
 | |
|   3 - output([t1.id], [t1.sales]), filter(nil), 
 | |
|       access([t1.id], [t1.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.id]), range(MIN ; MAX)always true
 | |
| 
 | |
| *************** Case 7(end)  ************** 
 | |
| 
 | |
| ***************   Case 8   ***************
 | |
| 
 | |
| SQL: merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id and t1.id != t2.sales) when matched then update set t1.sales = 1; 
 | |
| 
 | |
| ==========================================
 | |
| |ID|OPERATOR         |NAME|EST. ROWS|COST|
 | |
| ------------------------------------------
 | |
| |0 |MERGE            |    |405      |405 |
 | |
| |1 | MERGE OUTER JOIN|    |405      |549 |
 | |
| |2 |  TABLE SCAN     |t2  |100      |90  |
 | |
| |3 |  TABLE SCAN     |t1  |100      |90  |
 | |
| ==========================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([1]), filter(nil), 
 | |
|       columns([t1.id], [t1.sales]), partitions(nil), update([t1.sales=?]), 
 | |
|       match_conds([t1.id = t2.id], [t1.id != t2.sales]), insert_conds(nil), 
 | |
|       update_conds(nil), delete_conds(nil)
 | |
|   1 - output([t1.id = t2.id], [t1.id != t2.sales], [t1.id]), filter(nil), 
 | |
|       equal_conds([t1.id = t2.id]), other_conds([t1.id != t2.sales])
 | |
|   2 - output([t2.id], [t2.sales]), filter(nil), 
 | |
|       access([t2.id], [t2.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t2.id]), range(MIN ; MAX)always true
 | |
|   3 - output([t1.id], [t1.sales]), filter(nil), 
 | |
|       access([t1.id], [t1.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.id]), range(MIN ; MAX)always true
 | |
| 
 | |
| *************** Case 8(end)  ************** 
 | |
| 
 | |
| ***************   Case 9   ***************
 | |
| 
 | |
| SQL: merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id) when not matched then insert(t1.id, t1.sales) values(1, 1); 
 | |
| 
 | |
| ==========================================
 | |
| |ID|OPERATOR         |NAME|EST. ROWS|COST|
 | |
| ------------------------------------------
 | |
| |0 |MERGE            |    |810      |810 |
 | |
| |1 | MERGE OUTER JOIN|    |810      |686 |
 | |
| |2 |  TABLE SCAN     |t2  |100      |88  |
 | |
| |3 |  TABLE SCAN     |t1  |100      |90  |
 | |
| ==========================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([?], [?]), filter(nil), 
 | |
|       columns([t1.id], [t1.sales]), partitions(nil), 
 | |
|       match_conds([t1.id = t2.id]), insert_conds(nil), 
 | |
|       update_conds(nil), delete_conds(nil)
 | |
|   1 - output([t1.id = t2.id], [t1.id]), filter(nil), 
 | |
|       equal_conds([t1.id = t2.id]), other_conds(nil)
 | |
|   2 - output([t2.id]), filter(nil), 
 | |
|       access([t2.id]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t2.id]), range(MIN ; MAX)always true
 | |
|   3 - output([t1.id], [t1.sales]), filter(nil), 
 | |
|       access([t1.id], [t1.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.id]), range(MIN ; MAX)always true
 | |
| 
 | |
| *************** Case 9(end)  ************** 
 | |
| 
 | |
| ***************   Case 10   ***************
 | |
| 
 | |
| SQL: merge into targetTable t1 using sourceTable t2 on (t1.id = t2.id) when not matched then insert(t1.id) values(t2.id); 
 | |
| 
 | |
| ==========================================
 | |
| |ID|OPERATOR         |NAME|EST. ROWS|COST|
 | |
| ------------------------------------------
 | |
| |0 |MERGE            |    |810      |810 |
 | |
| |1 | MERGE OUTER JOIN|    |810      |686 |
 | |
| |2 |  TABLE SCAN     |t2  |100      |88  |
 | |
| |3 |  TABLE SCAN     |t1  |100      |90  |
 | |
| ==========================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([column_conv(INT,PS:(11,0),NOT NULL,t2.id)], [?]), filter(nil), 
 | |
|       columns([t1.id], [t1.sales]), partitions(nil), 
 | |
|       match_conds([t1.id = t2.id]), insert_conds(nil), 
 | |
|       update_conds(nil), delete_conds(nil)
 | |
|   1 - output([t2.id], [column_conv(INT,PS:(11,0),NOT NULL,t2.id)], [t1.id = t2.id], [t1.id]), filter(nil), 
 | |
|       equal_conds([t1.id = t2.id]), other_conds(nil)
 | |
|   2 - output([t2.id]), filter(nil), 
 | |
|       access([t2.id]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t2.id]), range(MIN ; MAX)always true
 | |
|   3 - output([t1.id], [t1.sales]), filter(nil), 
 | |
|       access([t1.id], [t1.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.id]), range(MIN ; MAX)always true
 | |
| 
 | |
| *************** Case 10(end)  ************** 
 | |
| 
 | |
| ***************   Case 11   ***************
 | |
| 
 | |
| SQL: merge into target1 using sourceTable on (target1.id = sourceTable.id) when matched then update set target1.c2 = sourceTable.sales; 
 | |
| 
 | |
| =================================================
 | |
| |ID|OPERATOR         |NAME       |EST. ROWS|COST|
 | |
| -------------------------------------------------
 | |
| |0 |MERGE            |           |810      |810 |
 | |
| |1 | MERGE OUTER JOIN|           |810      |690 |
 | |
| |2 |  TABLE SCAN     |sourceTable|100      |90  |
 | |
| |3 |  TABLE SCAN     |target1    |100      |92  |
 | |
| =================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([1]), filter(nil), 
 | |
|       columns([target1.id], [target1.c2], [target1.c3]), partitions(nil), update([target1.c2=column_conv(INT,PS:(11,0),NOT NULL,sourceTable.sales)]), 
 | |
|       match_conds([target1.id = sourceTable.id]), insert_conds(nil), 
 | |
|       update_conds(nil), delete_conds(nil)
 | |
|   1 - output([sourceTable.sales], [column_conv(INT,PS:(11,0),NOT NULL,sourceTable.sales)], [target1.id = sourceTable.id], [target1.id], [target1.c2]), filter(nil), 
 | |
|       equal_conds([target1.id = sourceTable.id]), other_conds(nil)
 | |
|   2 - output([sourceTable.id], [sourceTable.sales]), filter(nil), 
 | |
|       access([sourceTable.id], [sourceTable.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([sourceTable.id]), range(MIN ; MAX)always true
 | |
|   3 - output([target1.id], [target1.c2], [target1.c3]), filter(nil), 
 | |
|       access([target1.id], [target1.c2], [target1.c3]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([target1.id], [target1.c2]), range(MIN,MIN ; MAX,MAX)always true
 | |
| 
 | |
| *************** Case 11(end)  ************** 
 | |
| 
 | |
| ***************   Case 12   ***************
 | |
| 
 | |
| SQL: merge into target2 using sourceTable on (target2.id = sourceTable.id) when matched then update set target2.c2 = sourceTable.sales; 
 | |
| 
 | |
| ================================================
 | |
| |ID|OPERATOR        |NAME       |EST. ROWS|COST|
 | |
| ------------------------------------------------
 | |
| |0 |MERGE           |           |810      |810 |
 | |
| |1 | HASH OUTER JOIN|           |810      |828 |
 | |
| |2 |  TABLE SCAN    |sourceTable|100      |90  |
 | |
| |3 |  TABLE SCAN    |target2    |100      |97  |
 | |
| ================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([1]), filter(nil), 
 | |
|       columns([target2.__pk_increment], [target2.__pk_cluster_id], [target2.__pk_partition_id], [target2.id], [target2.c2]), partitions(nil), update([target2.c2=column_conv(INT,PS:(11,0),NULL,sourceTable.sales)]), 
 | |
|       match_conds([target2.id = sourceTable.id]), insert_conds(nil), 
 | |
|       update_conds(nil), delete_conds(nil)
 | |
|   1 - output([sourceTable.sales], [column_conv(INT,PS:(11,0),NULL,sourceTable.sales)], [target2.id = sourceTable.id], [target2.__pk_increment], [target2.__pk_cluster_id], [target2.__pk_partition_id]), filter(nil), 
 | |
|       equal_conds([target2.id = sourceTable.id]), other_conds(nil)
 | |
|   2 - output([sourceTable.id], [sourceTable.sales]), filter(nil), 
 | |
|       access([sourceTable.id], [sourceTable.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([sourceTable.id]), range(MIN ; MAX)always true
 | |
|   3 - output([target2.id], [target2.c2], [target2.__pk_increment], [target2.__pk_cluster_id], [target2.__pk_partition_id]), filter(nil), 
 | |
|       access([target2.id], [target2.c2], [target2.__pk_increment], [target2.__pk_cluster_id], [target2.__pk_partition_id]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([target2.__pk_increment], [target2.__pk_cluster_id], [target2.__pk_partition_id]), range(MIN,MIN,MIN ; MAX,MAX,MAX)always true
 | |
| 
 | |
| *************** Case 12(end)  ************** 
 | |
| 
 | |
| ***************   Case 13   ***************
 | |
| 
 | |
| SQL: merge into targetTable t1 using (select * from sourceTable) t2 on (t1.id = t2.id) when matched then update set t1.sales = t2.sales where t1.id = 999 delete where t1.sales =888 when not matched then insert(t1.id, t1.sales) values(t2.id, t2.sales) where t2.id = 777; 
 | |
| 
 | |
| =================================================
 | |
| |ID|OPERATOR         |NAME       |EST. ROWS|COST|
 | |
| -------------------------------------------------
 | |
| |0 |MERGE            |           |100      |100 |
 | |
| |1 | MERGE OUTER JOIN|           |100      |274 |
 | |
| |2 |  SUBPLAN SCAN   |t2         |100      |104 |
 | |
| |3 |   TABLE SCAN    |sourceTable|100      |90  |
 | |
| |4 |  TABLE SCAN     |t1         |100      |90  |
 | |
| =================================================
 | |
| 
 | |
| Outputs & filters: 
 | |
| -------------------------------------
 | |
|   0 - output([column_conv(INT,PS:(11,0),NOT NULL,t2.id)], [column_conv(INT,PS:(11,0),NULL,t2.sales)]), filter(nil), 
 | |
|       columns([t1.id], [t1.sales]), partitions(nil), update([t1.sales=column_conv(INT,PS:(11,0),NULL,t2.sales)]), 
 | |
|       match_conds([t1.id = t2.id]), insert_conds([t2.id = 777]), 
 | |
|       update_conds([t1.id = 999]), delete_conds([t1.sales = 888])
 | |
|   1 - output([t2.id], [column_conv(INT,PS:(11,0),NOT NULL,t2.id)], [t2.sales], [column_conv(INT,PS:(11,0),NULL,t2.sales)], [column_conv(INT,PS:(11,0),NULL,t2.sales)], [t1.id = t2.id], [t2.id = 777], [t1.id = 999], [t1.sales], [t1.id]), filter(nil), 
 | |
|       equal_conds([t1.id = t2.id]), other_conds(nil)
 | |
|   2 - output([t2.id], [t2.sales]), filter(nil), 
 | |
|       access([t2.id], [t2.sales])
 | |
|   3 - output([sourceTable.id], [sourceTable.sales]), filter(nil), 
 | |
|       access([sourceTable.id], [sourceTable.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([sourceTable.id]), range(MIN ; MAX)always true
 | |
|   4 - output([t1.id], [t1.sales]), filter(nil), 
 | |
|       access([t1.id], [t1.sales]), partitions(p0), 
 | |
|       is_index_back=false, 
 | |
|       range_key([t1.id]), range(MIN ; MAX)always true
 | |
| 
 | |
| *************** Case 13(end)  ************** 
 | |
| 
 | 
