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