github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/opt/exec/execbuilder/testdata/update_from (about) 1 # LogicTest: local 2 3 statement ok 4 CREATE TABLE abc (a int primary key, b int, c int) 5 6 # Updating using self join. 7 query TTT 8 EXPLAIN UPDATE abc SET b = other.b + 1, c = other.c + 1 FROM abc AS other WHERE abc.a = other.a 9 ---- 10 · distributed false 11 · vectorized false 12 count · · 13 └── update · · 14 │ table abc 15 │ set b, c 16 │ strategy updater 17 │ auto commit · 18 └── render · · 19 └── merge-join · · 20 │ type inner 21 │ equality (a) = (a) 22 │ left cols are key · 23 │ right cols are key · 24 │ mergeJoinOrder +"(a=a)" 25 ├── scan · · 26 │ table abc@primary 27 │ spans FULL SCAN 28 └── scan · · 29 · table abc@primary 30 · spans FULL SCAN 31 32 # Update from another table. 33 statement ok 34 CREATE TABLE new_abc (a int, b int, c int) 35 36 query TTT 37 EXPLAIN UPDATE abc SET b = other.b, c = other.c FROM new_abc AS other WHERE abc.a = other.a 38 ---- 39 · distributed false 40 · vectorized false 41 count · · 42 └── update · · 43 │ table abc 44 │ set b, c 45 │ strategy updater 46 │ auto commit · 47 └── render · · 48 └── distinct · · 49 │ distinct on a 50 └── hash-join · · 51 │ type inner 52 │ equality (a) = (a) 53 │ left cols are key · 54 ├── scan · · 55 │ table abc@primary 56 │ spans FULL SCAN 57 └── scan · · 58 · table new_abc@primary 59 · spans FULL SCAN 60 61 # Returning old values. 62 query TTT 63 EXPLAIN UPDATE abc 64 SET 65 b = old.b + 1, c = old.c + 2 66 FROM 67 abc AS old 68 WHERE 69 abc.a = old.a 70 RETURNING 71 abc.a, abc.b AS new_b, old.b as old_b, abc.c as new_c, old.c as old_c 72 ---- 73 · distributed false 74 · vectorized false 75 render · · 76 └── run · · 77 └── update · · 78 │ table abc 79 │ set b, c 80 │ strategy updater 81 │ auto commit · 82 └── render · · 83 └── merge-join · · 84 │ type inner 85 │ equality (a) = (a) 86 │ left cols are key · 87 │ right cols are key · 88 │ mergeJoinOrder +"(a=a)" 89 ├── scan · · 90 │ table abc@primary 91 │ spans FULL SCAN 92 └── scan · · 93 · table abc@primary 94 · spans FULL SCAN 95 96 # Check if RETURNING * returns everything 97 query TTTTT 98 EXPLAIN (VERBOSE) UPDATE abc SET b = old.b + 1, c = old.c + 2 FROM abc AS old WHERE abc.a = old.a RETURNING * 99 ---- 100 · distributed false · · 101 · vectorized false · · 102 run · · (a, b, c, a, b, c) · 103 └── update · · (a, b, c, a, b, c) · 104 │ table abc · · 105 │ set b, c · · 106 │ strategy updater · · 107 │ auto commit · · · 108 └── render · · (a, b, c, b_new, c_new, a, b, c) · 109 │ render 0 a · · 110 │ render 1 b · · 111 │ render 2 c · · 112 │ render 3 b + 1 · · 113 │ render 4 c + 2 · · 114 │ render 5 a · · 115 │ render 6 b · · 116 │ render 7 c · · 117 └── merge-join · · (a, b, c, a, b, c) · 118 │ type inner · · 119 │ equality (a) = (a) · · 120 │ left cols are key · · · 121 │ right cols are key · · · 122 │ mergeJoinOrder +"(a=a)" · · 123 ├── scan · · (a, b, c) +a 124 │ table abc@primary · · 125 │ spans FULL SCAN · · 126 └── scan · · (a, b, c) +a 127 · table abc@primary · · 128 · spans FULL SCAN · · 129 130 # Update values of table from values expression 131 query TTT 132 EXPLAIN UPDATE abc SET b = other.b, c = other.c FROM (values (1, 2, 3), (2, 3, 4)) as other ("a", "b", "c") WHERE abc.a = other.a 133 ---- 134 · distributed false 135 · vectorized false 136 count · · 137 └── update · · 138 │ table abc 139 │ set b, c 140 │ strategy updater 141 │ auto commit · 142 └── render · · 143 └── distinct · · 144 │ distinct on a 145 └── lookup-join · · 146 │ table abc@primary 147 │ type inner 148 │ equality (column1) = (a) 149 │ equality cols are key · 150 │ parallel · 151 └── values · · 152 · size 3 columns, 2 rows 153 154 # Check if UPDATE ... FROM works with multiple tables. 155 statement ok 156 CREATE TABLE ab (a INT, b INT) 157 158 statement ok 159 CREATE TABLE ac (a INT, c INT) 160 161 query TTT 162 EXPLAIN UPDATE abc SET b = ab.b, c = ac.c FROM ab, ac WHERE abc.a = ab.a AND abc.a = ac.a 163 ---- 164 · distributed false 165 · vectorized false 166 count · · 167 └── update · · 168 │ table abc 169 │ set b, c 170 │ strategy updater 171 │ auto commit · 172 └── render · · 173 └── distinct · · 174 │ distinct on a 175 └── hash-join · · 176 │ type inner 177 │ equality (a) = (a) 178 ├── scan · · 179 │ table ab@primary 180 │ spans FULL SCAN 181 └── hash-join · · 182 │ type inner 183 │ equality (a) = (a) 184 │ right cols are key · 185 ├── scan · · 186 │ table ac@primary 187 │ spans FULL SCAN 188 └── scan · · 189 · table abc@primary 190 · spans FULL SCAN 191 192 # Make sure UPDATE ... FROM works with LATERAL. 193 query TTT 194 EXPLAIN UPDATE abc 195 SET 196 b=ab.b, c = other.c 197 FROM 198 ab, LATERAL 199 (SELECT * FROM ac WHERE ab.a=ac.a) AS other 200 WHERE 201 abc.a=ab.a 202 RETURNING 203 * 204 ---- 205 · distributed false 206 · vectorized false 207 run · · 208 └── update · · 209 │ table abc 210 │ set b, c 211 │ strategy updater 212 │ auto commit · 213 └── render · · 214 └── distinct · · 215 │ distinct on a 216 └── hash-join · · 217 │ type inner 218 │ equality (a) = (a) 219 ├── scan · · 220 │ table ab@primary 221 │ spans FULL SCAN 222 └── hash-join · · 223 │ type inner 224 │ equality (a) = (a) 225 │ right cols are key · 226 ├── scan · · 227 │ table ac@primary 228 │ spans FULL SCAN 229 └── scan · · 230 · table abc@primary 231 · spans FULL SCAN