Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 根据特定条件将数据从另一个表插入到一个表中_Mysql - Fatal编程技术网

Mysql 根据特定条件将数据从另一个表插入到一个表中

Mysql 根据特定条件将数据从另一个表插入到一个表中,mysql,Mysql,我有“表1”,其中主数据存储如下- id name create_date validity expire_date 1 A 2015-08-01 3 2015-11-01 2 B 2015-09-01 12 2016-08-01 3 C 2015-09-15 1 2015-10-15 但现在,我们希望在“表2”中插入数据,根据有效期确定过期日期

我有“表1”,其中主数据存储如下-

id  name    create_date validity    expire_date
    1   A       2015-08-01  3           2015-11-01
    2   B       2015-09-01  12          2016-08-01
    3   C       2015-09-15  1           2015-10-15
但现在,我们希望在“表2”中插入数据,根据有效期确定过期日期,就像前端一样,不做任何更改。使用触发器或过程来完成此任务

   id    parent_id   expire_date   
    1     1           2015-09-01
    2     1           2015-10-01
    3     1           2015-11-01

如何使用过程或触发器实现此目的

很难具体,因为你的问题不具体

一般来说,下面是设计一个查询以将数据从一个表插入另一个表的过程

首先,编写一个
SELECT
查询,生成一个包含要插入到表中的行和列的结果集。使用列列表获取正确的列,并使用适当的
WHERE
子句获取正确的行。仔细观察该查询和结果集,确保其中包含正确的信息

Second,在调试的
之前选择
查询

INSERT INTO target_tablename (col, col, col)
测试此项以确保将正确的行插入到目标表中

第三个,在MySQL服务器中创建一个
事件
,以运行刚才编写的查询。事件将在一天中的适当时间运行您的查询


如果你不按顺序执行这些步骤,你可能会非常困惑

很难具体,因为你的问题不具体

一般来说,下面是设计一个查询以将数据从一个表插入另一个表的过程

首先,编写一个
SELECT
查询,生成一个包含要插入到表中的行和列的结果集。使用列列表获取正确的列,并使用适当的
WHERE
子句获取正确的行。仔细观察该查询和结果集,确保其中包含正确的信息

Second,在调试的
之前选择
查询

INSERT INTO target_tablename (col, col, col)
测试此项以确保将正确的行插入到目标表中

第三个,在MySQL服务器中创建一个
事件
,以运行刚才编写的查询。事件将在一天中的适当时间运行您的查询


如果你不按顺序执行这些步骤,你可能会非常困惑

可以使用存储过程完成任务-

CREATE DEFINER=`root`@`localhost` PROCEDURE `addexpire`(IN uname varchar(50), IN cdate date, IN vm int)
BEGIN
    insert into table1 (name,create_date,validity) values (uname,cdate,vm);
    BEGIN
    declare uparent_id INT;
    declare v_val int default 0;
    SET uparent_id = LAST_INSERT_ID();
    while v_val < vm do
        BEGIN
            declare expire_date date;   
            SET expire_date =  DATE_ADD(cdate,INTERVAL v_val+1 MONTH);
            insert into table2 (parent_id,expire_date) values (uparent_id,expire_date);
            set v_val=v_val+1;
        END;
    end while;
  END;
END
CREATE DEFINER=`root`@`localhost`过程`addexpire`(在uname varchar(50)中,在cdate date中,在vm int中)
开始
在表1(名称、创建日期、有效期)中插入值(uname、cdate、vm);
开始
声明uparent_id INT;
声明v_val int默认值为0;
SET uparent_id=最后一次插入_id();
而v_val
可以使用存储过程完成任务-

CREATE DEFINER=`root`@`localhost` PROCEDURE `addexpire`(IN uname varchar(50), IN cdate date, IN vm int)
BEGIN
    insert into table1 (name,create_date,validity) values (uname,cdate,vm);
    BEGIN
    declare uparent_id INT;
    declare v_val int default 0;
    SET uparent_id = LAST_INSERT_ID();
    while v_val < vm do
        BEGIN
            declare expire_date date;   
            SET expire_date =  DATE_ADD(cdate,INTERVAL v_val+1 MONTH);
            insert into table2 (parent_id,expire_date) values (uparent_id,expire_date);
            set v_val=v_val+1;
        END;
    end while;
  END;
END
CREATE DEFINER=`root`@`localhost`过程`addexpire`(在uname varchar(50)中,在cdate date中,在vm int中)
开始
在表1(名称、创建日期、有效期)中插入值(uname、cdate、vm);
开始
声明uparent_id INT;
声明v_val int默认值为0;
SET uparent_id=最后一次插入_id();
而v_val
问题不清楚。到目前为止您尝试了什么,您的最佳解决方案存在什么问题?因此,这不是一个代码生成器服务,请显示一些努力。另外,请阅读中的文章。谢谢。使用触发器解决查询。问题不清楚。到目前为止您尝试了什么,您的最佳解决方案有什么问题?因此,这不是一个代码生成器服务,请显示一些努力。另外,请阅读中的文章。谢谢。使用触发器解决查询。