日期:2014-05-17  浏览次数:20500 次

菜鸟求大虾指导!sqlite3 触发器 多表连接 插入数据
本帖最后由 huyidao88116 于 2013-05-07 11:35:32 编辑
表1,3,4是必须有的,表2是我写出来好看的(可以没有,也可以有),根据表1的内容插入表3,4.
1.表Jumper1
FromDevice FromPin FromNet ToDevice ToPin ToNet
U2 30 M30 U3 14 M14
Jp1 1 M1 Jp1 2 M2
R7 3 M1 R8 4 M2
Jp2 11 M11 Jp2 12 M12
Jp2 12 M12 Jp3 22 M22

2.表Jumper2
ID FromDevice FromPin FromNet ToDevice ToPin ToNet WkingNetName
1 U2 30 M30 U3 14 M14 M30_M14
2 Jp1 1 M1 Jp1 2 M2 M1_M2
3 R7 3 M1 R8 4 M2 M1_M2
4 Jp2 11 M11 Jp2 12 M12 M11_M12
5 Jp2 12 M12 Jp3 22 M22 M12_M22

3.新的工作网络名表WkingNetName
ID Name
1 Net1
2 Net2
3 Net3
4

Net1:M30_M14  net2:M1_M2  net3:M11_M12,M12_M22
Name:根据表jumper中的fromnet和tonet取新的工作网络名name,若frompin和topin中有相同的则视为同一新网络名(Net1包括M30_M14  net2包括M1_M2  net3包括M11_M12,M12_M22)还有,这个新生成的name取名不一定net1,net2,net3,大家看看什么命名规则合适。 

4.新的工作网络连接关系表WkingNetConectionRelation
ID WkingNetID WkingPinID
1 1 14
2 1 30
3 2 1
4 2 2
5 2 3
6 2 4
7 3 11
8 3 12
9 3 22

Wkingpinid包含jumper表中的frompin和topin的所有内容,插入表之前去除重复的wkingpinid

插入Wkingnetid时,可以根据WkingPinID对应jumper2表中的frompin和topin,再找到对应的wkingnetname,在对应wkingnetname表中的name找到对应的id。

系统环境:vs2008,sqlite3.7.14.1,用c++调用Sqlite3
生成wkingnetname时要好像用触发器,这个怎么写呢?求大神指导!
SQLite3

------解决方案--------------------
CREATE TABLE Jumper1b(id integer primary key ,FromDevice varchar(10),FromPin int, FromNet	varchar(10),ToDevice varchar(10),  ToPin int,	 ToNet varchar(10));
create table jumper1c(id integer ,FromDevice varchar(10),FromPin int, FromNet varchar(10),ToDevice varchar(10),  ToPin int,  ToNet varchar(10));
create table jumper1d(id integer PRIMARY KEY,Name varchar(30));

insert into jumper1b select null,* from jumper1;

insert into jumper1c
select (select min(id) from jumper1b where id<>a.id and fromnet =a.[FromNet] or fromnet=a.[ToNet] or tonet =a.[ToNet] or tonet=a.fromnet ),
FromDevice,FromPin,FromNet,ToDevice,ToPin,ToNet 
from jumper1b as a;

insert into jumper1d select distinct NULL, 'NET' 
------解决方案--------------------
 ID  from jumper1c a