0

我有两个数据库

  1. db1

  2. 数据库2

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 点:过滤从 db1.controller 中不存在的 db2.store 获取的新 store_number。

对于这些新的 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查询。

提前致谢

4

2 回答 2

1

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

在...的帮助下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;
于 2013-04-12T09:44:35.240 回答
1

这是我所做的

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'从db2stores 其中 s.store_number 不在(从 db1.controller 中选择 store_number);

于 2013-04-12T12:01:03.917 回答