MySQL 迴圈建表和結合兩表的update

來源:互聯網
上載者:User

MySQL 迴圈建表和結合兩表的update

使用預存程序,實現迴圈建表

DELIMITER //

CREATE PROCEDURE test.create_channel_avail()

BEGIN

DECLARE `@i` INT(11);

DECLARE `@sqlstr` VARCHAR(2800);

SET `@i`=1;

WHILE `@i` < 101 DO

SET @sqlstr = CONCAT(

"CREATE TABLE channel_avail",

`@i`, "(

  `prop` VARCHAR(40) ,

  `stay_date` DATE,

  `roomcode` VARCHAR(40),

  `channel_code` VARCHAR(40),

  `status` VARCHAR(1)  DEFAULT 'A' ,

  `createtime` DATETIME  COMMENT '建立時間戳記',

  `updatetime` DATETIME  COMMENT '更新時間戳記',

  PRIMARY KEY (`prop`,`stay_date`,`roomcode`,`channel_code`)

) ENGINE=INNODB

 DEFAULT CHARSET=utf8;

 "

);

PREPARE stmt FROM @sqlstr;

EXECUTE stmt;

SET `@i` = `@i` + 1;

END WHILE;

END;

CALL test.create_channel_avail_db();


DROP PROCEDURE test.create_channel_avail_db;


在使用MySQL資料庫,update和select相結合去更新表中資料時要注意:

 如  表test1
      A  B
      1  a
      2  b
      3  c

    表test2
      A  B
    2  d
      3  e
      4  f
簡單的update與select結合,本來是希望把test1表中的a=2和a=2兩行的B列修改為d和e
 update from test1 set b = (select b from a where test1.a=test2.a)
注意這個文法是有個陷阱的,此時被更新的表test1中 a=2和a=3的確實被修改為d和e,可是由於a=1行的資料不在結果集裡面,所有被set為null,,,也就是說除了結果集有的被更新,沒有的值會被設定為null(不允許為null的列暫未測試)

使用inner join的方法就是我們想要的結果,所以要用該方法代替上面的SQL


update test1  INNER JOIN test2  ON a.id=b.id

SET test1.B=test2.B

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.