使用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 db2
。 store
s,其中s.store_number不在(从db1.controller中选择store_number);