php update 两张表,MySQL 循环建表和结合两表的update

本文介绍了如何使用MySQL存储过程实现循环建表,并警告了在使用update和select结合更新表数据时可能遇到的问题。当update结合select更新表时,如果结果集中没有的行将被设置为NULL,而使用inner join则能避免此问题。文章提供了正确的SQL更新语句示例。
摘要由CSDN通过智能技术生成

使用存储过程,实现循环建表 DELIMITER // CREATE PROCEDURE test.create_channel_avail() BEGIN DECLARE `@i` INT(11); DECLARE

使用存储过程,实现循环建表

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

本文永久更新链接地址:

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值