使用mysql中的数据来整理表格

我有两个数据库

  • DB1

  • DB2

  • db1在控制器表的描述下有表控制器

    +-----------------------+--------------+------+-----+---------+-------+
    | Field                 | Type         | Null | Key | Default | Extra |
    +-----------------------+--------------+------+-----+---------+-------+
    | id                    | int(11)      | NO   | PRI | NULL    |       |
    | interface_name        | varchar(255) | YES  |     | NULL    |       |
    | store_number          | int(11)      | YES  |     | NULL    |       |
    | file_seq_no           | int(11)      | YES  |     | NULL    |       |
    | packet_seq_no         | int(11)      | YES  |     | NULL    |       |
    | last_trans_start_date | date         | YES  |     | NULL    |       |
    | last_trans_end_date   | date         | YES  |     | NULL    |       |
    | last_extract_datetime | datetime     | YES  |     | NULL    |       |
    | is_enabled            | char(1)      | YES  |     | NULL    |       |
    +-----------------------+--------------+------+-----+---------+-------+
    

    以及具有名称存储表的数据库db2中具有不同名称的相同表格描述和附加列(date_opened)。

    我的工作是根据以下逻辑编写查询。

    第1点:从db2.store获取所有store_number,date_opened。

    第2点:从db1.controller表中将所有store_number提取到列表中。

    第3点:筛选从db2.store中获取的新store_number不存在于db1.controller中。

    对于这些新的store_number中的每一个

    插入新商店的默认初始值,file_seq_number和packet_seq_number将被设置为零。

    last_transaction_start_date,last_transaction_end_date,last_extract_timestamp将是商店创建日期,即db2.store.date_opened

    启用将被设置为1

    主查询将是

    Insert into db1.controller table values( store_number, 0, 0,$date_opened,$date_opened,
    $date_opened,1);
    

    任何人都可以帮助我完成这个SQL查询。

    提前致谢


    您可以通过两种方式获取过滤的数据。

    借助于subquery

    Select db2.store .* from db2.store  where db2.store.id not in(Select db1.controller.id from db1.controller)
    

    这里将显示db1.controller中不存在的所有新数据。 您也可以在连接的帮助下显示相同的结果。

     SELECT db2.store.* FROM  db2.store  LEFT JOIN db1.controller ON db2.store.ID = db1.controller.ID WHERE db1.controller.ID IS NULL
    

    您将获得db1.controller不存在的数据,现在迭代数据并执行插入查询。

    更新

    您可以在单个查询下面尝试添加过滤的记录。

    Insert into db1.controller (id,interface_name,store_number,file_seq_no,packet_seq_no,last_trans_start_date,last_trans_end_date,last_extract_datetime,is_enabled)  SELECT db2.store.id, db2.store.interface_name, db2.store.store_number, 0, 0, db2.store.date_opened, db2.store.date_opened, db2.store.date_opened, db2.store.is_enabled  FROM  db2.store  LEFT JOIN db1.controller ON db2.store.ID = db1.controller.ID WHERE db1.controller.ID IS NULL;
    

    这是我做的

    INSERT INTO db1.controller(interface_name,store_number,file_seq_no,packet_seq_no,last_trans_start_date,last_trans_end_date,last_extract_datetime,is_enabled)SELECT'test',s.store_number,0,0,s.date_opened,s.date_opened,s.date_opened,'1' FROM db2store s,其中s.store_number不在(从db1.controller中选择store_number);

    链接地址: http://www.djcxy.com/p/94227.html

    上一篇: Pupulate table with data in mysql

    下一篇: Mysql replication on single server