github.com/matrixorigin/matrixone@v1.2.0/test/distributed/cases/dml/update/update_multiple_table.sql (about) 1 -- @suit 2 3 -- @case 4 -- @desc:test for UPDATE for multiple table 5 -- @label:bvt 6 7 CREATE TABLE product( 8 id VARCHAR(20), 9 product_id VARCHAR(20), 10 product_name VARCHAR(50), 11 price FLOAT 12 ); 13 14 CREATE TABLE product_price( 15 id VARCHAR(20), 16 product_id VARCHAR(20), 17 price FLOAT 18 ); 19 20 INSERT INTO product() VALUES ('1', '1001', 'Java教程', '100'); 21 INSERT INTO product() VALUES ('2', '1002', 'MySQL教程', '80'); 22 INSERT INTO product() VALUES ('3', '1003', 'Python教程', '120'); 23 INSERT INTO product() VALUES ('4', '1004', 'C语言教程', '150'); 24 INSERT INTO product_price() VALUES ('1', '1001', NULL); 25 INSERT INTO product_price() VALUES ('2', '1002', NULL); 26 INSERT INTO product_price() VALUES ('3', '1003', NULL); 27 28 UPDATE product_price, product SET product.id = product.id + 1, product_price.id = product_price.id + 1; 29 SELECT product.id, product_price.id FROM product, product_price; 30 UPDATE product, product_price SET product_name = 'PHP', product_price.price = 100 WHERE product.product_id = '1001'; 31 SELECT * FROM product; 32 SELECT * FROM product_price; 33 -- USE '=' to connect two tables for UPDATE 34 UPDATE product p, product_price pp SET pp.price = p.price * 0.8 WHERE p.product_id = pp.product_id; 35 SELECT product.id, product.product_name, product_price.price FROM product, product_price; 36 -- USE 'INNER JOIN' to connect two tables for UPDATE 37 UPDATE product p INNER JOIN product_price pp ON p.product_id = pp.product_id SET pp.price = p.price * 0.8; 38 SELECT product.product_name, product_price.price FROM product, product_price; 39 DROP TABLE IF EXISTS product; 40 DROP TABLE IF EXISTS product_price; 41 42 CREATE TABLE stu( 43 id VARCHAR(10), 44 name VARCHAR(20), 45 class_id VARCHAR(5), 46 class_name VARCHAR(10) 47 ); 48 CREATE TABLE class( 49 id VARCHAR(10), 50 name VARCHAR(20), 51 stu_name VARCHAR(20) 52 ); 53 54 INSERT INTO stu VALUES('1', '张三', '1', NULL), ('2', '李四', '1', NULL), ('3', '王五', '2', NULL); 55 INSERT INTO stu VALUES('4', 'Rose', '2', NULL), ('5', 'Bob', '4', NULL), ('6', 'Ruby', '5', NULL); 56 INSERT INTO class VALUES('1', '一班', NULL), ('2', '二班', NULL), ('3', '三班', NULL); 57 58 UPDATE stu s , class c SET s.class_name = 'test00', c.stu_name = 'test00' WHERE s.class_id = c.id; 59 SELECT stu.name, stu.class_name, class.name, class.stu_name FROM stu, class; 60 UPDATE stu s INNER JOIN class c ON s.class_id = c.id SET s.class_name = 'test11', c.stu_name = 'test11'; 61 SELECT stu.id, stu.name, stu.class_name, class.stu_name FROM stu, class; 62 63 64 UPDATE stu s LEFT JOIN class c ON s.class_id = c.id SET s.class_name = 'test22', c.stu_name = 'test22'; 65 UPDATE stu s RIGHT JOIN class c ON s.class_id = c.id SET s.class_name = 'test33',c.stu_name = 'test33'; 66 SELECT stu.name, stu.class_name, class.stu_name FROM stu, class; 67 UPDATE stu s JOIN class c ON s.class_id = c.id SET s.class_name = c.name , c.stu_name = s.name; 68 SELECT stu.name, stu.class_name, class.stu_name FROM stu, class; 69 70 DROP TABLE IF EXISTS stu; 71 DROP TABLE IF EXISTS class; 72 73 CREATE TABLE t1( 74 id INT, 75 name VARCHAR(20), 76 paytime DATETIME 77 ); 78 CREATE TABLE t2( 79 id INT, 80 processtime DATETIME 81 ); 82 83 INSERT INTO t1() VALUES(1, 'has', '2022-08-17 19:16:18'), (2, 'norm', '2022-04-12 04:32:46'); 84 INSERT INTO t2() VALUES(1, '2022-08-17 20:23:06'), (2, '2022-04-18 09:19:15'); 85 SELECT * FROM t1; 86 SELECT * FROM t2; 87 UPDATE t1,t2 SET name = 'tom' WHERE t1.id = '1' AND t2.id = '2'; 88 SELECT t1.id, t1.name FROM t1; 89 UPDATE t1,t2 SET paytime = '2022-08-16 19:16:18', processtime = '2022-08-16 20:23:06' WHERE t1.id = t2.id AND paytime > '2022-08-15'; 90 -- USE DATE_ADD function. 91 UPDATE t1,t2 92 SET 93 paytime = DATE_ADD(paytime, INTERVAL 4 DAY), processtime = DATE_SUB(processtime, INTERVAL 6 DAY) 94 WHERE 95 paytime > '2022-08-25'; 96 SELECT t1.paytime, t2.processtime FROM t1,t2; 97 98 -- USE TO_DATE() function. 99 UPDATE t1,t2 100 SET 101 paytime = TO_DATE('2099-01-01 00:00:01', '%Y-%m-%d %H-%i-%s'), processtime = TO_DATE('2088-01-01 :00:00:02', '%Y-%m-%d %H:%i:%s') 102 WHERE 103 t1.id = t2.id; 104 105 -- USE DATE() function 106 UPDATE t1,t2 107 SET 108 paytime = DATE('2088-01-01'), processtime = DATE('9999-01-01') 109 WHERE 110 t1.id = t2.id; 111 SELECT t1.id, t1.paytime, t2.processtime FROM t1, t2; 112 113 -- SubQuery 114 UPDATE t1,t2 SET paytime = (SELECT DATE('3333-06-06')), processtime = (SELECT DATE('8888-09-09')); 115 SELECT paytime,processtime FROM t1,t2; 116 117 DROP TABLE IF EXISTS t1; 118 DROP TABLE IF EXISTS t2; 119 120 CREATE TABLE t1( 121 str1 CHAR(20) NOT NULL PRIMARY KEY, 122 str2 VARCHAR(20) NOT NULL 123 ); 124 CREATE TABLE t2( 125 str1 CHAR(20), 126 str2 VARCHAR(20) NOT NULL 127 ); 128 129 INSERT INTO t1 VALUES('this is a test', 'that is actual'), ('1001', 'game of throne'); 130 INSERT INTO t2 VALUES('1001', 'little Iamp'), ('targeran', 'snow and rain'); 131 132 UPDATE t1,t2 SET t1.str1 = '', t2.str2 = 'NULL' WHERE t1.str1 = t2.str1; 133 SELECT t1.str1, t2.str2 FROM t1,t2; 134 UPDATE t1,t2 SET t1.str2 = SUBSTRING('jkfldisaojfd',5), t2.str1 = LENGTH('123'); 135 SELECT t1.str2, t2.str1 FROM t1,t2; 136 UPDATE t1,t2 SET t1.str2 = STARTSWITH(t1.str2,'t'), t2.str2 = STARTSWITH(t2.str2, 's'); 137 SELECT t1.str2, t2.str2 FROM t1,t2; 138 139 DROP TABLE IF EXISTS t1; 140 DROP TABLE IF EXISTS t2; 141 142 CREATE TABLE t1( 143 n1 INT, 144 n2 INT UNSIGNED, 145 n3 FLOAT 146 ); 147 CREATE TABLE t2( 148 n1 INT, 149 n2 DOUBLE 150 ); 151 152 INSERT INTO t1 VALUES(1, 2, 3), (5, 6, 7), (10, 11, 12), (12, -0, 19); 153 INSERT INTO t2 VALUES(1, 0), (5, -1), (19, 13); 154 155 UPDATE t1,t2 SET t1.n2 = EXP(1), t2.n2 = SIN(3) WHERE t1.n1 = t2.n1; 156 SELECT t1.n2, t2.n2 FROM t1, t2; 157 UPDATE t1,t2 SET t1.n2 = POWER(5, -1), t2.n2 = POWER(0,0) WHERE t1.n3 BETWEEN 0 AND 3; 158 SELECT t1.n2, t2.n2 FROM t1, t2; 159 160 DROP TABLE IF EXISTS t1; 161 DROP TABLE IF EXISTS t2; 162 163 164 165