菜鸟求大虾指导!sqlite3 触发器 多表连接 插入数据
本帖最后由 huyidao88116 于 2013-05-07 11:35:32 编辑 表1,3,4是必须有的,表2是我写出来好看的(可以没有,也可以有),根据表1的内容插入表3,4.
1.表Jumper1
FromDeviceFromPinFromNetToDeviceToPinToNet
U230M30U314M14
Jp11M1Jp12M2
R73M1R84M2
Jp211M11Jp212M12
Jp212M12Jp322M22
2.表Jumper2
IDFromDeviceFromPinFromNetToDeviceToPinToNetWkingNetName
1U230M30U314M14M30_M14
2Jp11M1Jp12M2M1_M2
3R73M1R84M2M1_M2
4Jp211M11Jp212M12M11_M12
5Jp212M12Jp322M22M12_M22
3.新的工作网络名表WkingNetName
IDName
1Net1
2Net2
3Net3
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
IDWkingNetIDWkingPinID
1114
2130
321
422
523
624
7311
8312
9322
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, FromNetvarchar(10),ToDevice varchar(10), ToPin int, ToNet varchar(10));
create table jumper1c(id integer ,FromDevice varchar(10),FromPin int, FromNetvarchar(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