其中 A表中有一个字段(a) 是由B表中的两个字段(c,d) 组合成的. 也就是说a字段可以拆成c,d
其他字段的数据一一对应.还有就是B表没有主键. ID可以重复.
36 个解决方案
#1
问题的关键在于那个组合字段如何拆分,如果规则很清楚,单独用SQL 语句就能完成!
当然,你用JAVA调用那个语句也可以,不过.. 没必要吧!
当然,你用JAVA调用那个语句也可以,不过.. 没必要吧!
#2
我想了个办法 就是 当对A表进行增删改查的时候同时对B表也进行同样的操作.
感觉这个方法有点笨.
不知道哪为高手 有更好的办法
感觉这个方法有点笨.
不知道哪为高手 有更好的办法
#3
路过,顶一个~
个人意见:用循环+六个变量。来操作(先取值,然后用SQL插入)。我做过可以。但是速度和性能不是很好! 呵呵,关公面前耍小刀! 呵呵~
个人意见:用循环+六个变量。来操作(先取值,然后用SQL插入)。我做过可以。但是速度和性能不是很好! 呵呵,关公面前耍小刀! 呵呵~
#4
其中a 是 (Monday)*2312-112312,(Tuesday)*2312-112312
现在要拆为 c 对应Monday,Tuesday
d 对应 2312-112312,2312-112312
现在要拆为 c 对应Monday,Tuesday
d 对应 2312-112312,2312-112312
#5
感觉这种数据库内部的数据交互,如果不需要外部加工,用存储过程解决比较好,快还好维护
#6
ls 哥们 能给讲的细点吗? 我对存储过程 了解不多.
#7
自己的贴顶起去!!!
#8
你是要现在整理数据,以后不用做这个导入操作了,还是说在以后每次向a插入数据都要插到b,如果只是这一次导入的话,就写sql搞定,要是每次插入a都要同时去插入b表,就可以在java程序里处理,或者在数据库写个触发器,新增或删除a时顺便向b做操作
#9
直接写个小的java应用,一直读取A表,然后读取A表的同时把A表的数据插入到B表去就行了,虽然效率不是很高,但简单
#10
回8楼, 我的需求就是 每次插入a都要同时去插入b表
A表做什么操作 B表也要做同样的操作.
再弱弱问一下, 主要是B表字段跟A表字段数量不等.要进行个拆分操作 该怎么搞这个触发器呢.
A表做什么操作 B表也要做同样的操作.
再弱弱问一下, 主要是B表字段跟A表字段数量不等.要进行个拆分操作 该怎么搞这个触发器呢.
#11
我数据库是 MYSQL
#12
CREATE TRIGGER trg_ins_A AFTER INSERT ON A
FOR EACH ROW
BEGIN
insert into B(c,d,....) values(截取1(NEW.a列),截取2(NEW.a列)........);
END
FOR EACH ROW
BEGIN
insert into B(c,d,....) values(截取1(NEW.a列),截取2(NEW.a列)........);
END
#13
我想了个办法 就是 当对A表进行增删改查的时候同时对B表也进行同样的操作.
支持你的做法,系统负荷分散,很好
2 我建议你在B里面只保存c,d 已经A表的主键作为外键就行了,这样做一个视图就可以拿到完整的B表了!
支持你的做法,系统负荷分散,很好
2 我建议你在B里面只保存c,d 已经A表的主键作为外键就行了,这样做一个视图就可以拿到完整的B表了!
#14
insert into b select ... from a;
#15
如果两个表中的数据要一一对应的话,插入前把b表数据先删除.
#16
java2000_net 我那样写 觉的数据更新实时 也是最快的吧. B表不能改了.因为这张表也是另一个项目组一起使用的.
比较郁闷.
我当时建议 写成一张表 就没这个麻烦了. 再写个没有实际意义的主键 不听. 比较郁闷.
比较郁闷.
我当时建议 写成一张表 就没这个麻烦了. 再写个没有实际意义的主键 不听. 比较郁闷.
#17
12 楼我还想问一个问题. 一个触发器 只能触发一个操作(insert or delete or update ),还是可以写多个操作.
#18
因为我不仅要插入 还要进行 删除 修改操作
#19
再建个删除的触发器,CREATE TRIGGER trg_del_A AFTER DELETE ON A... 不过b表没有唯一标识的列....
#20
恩,对头,我也赞成用触发器,那样子简单很多,你要拆分a表的两个字段,可以添加一个标志到a变的那列的数据中,遇到那个标志就一个substr。
#21
可以写个小程序,非常简单。
#22
什么简单的方法?
#23
D
#24
insert into b select * from a
2表具有相同的字段,复制a表的内容去b表中
2表具有相同的字段,复制a表的内容去b表中
#25
这种小问题,也要讨论半天?
#26
LS 别不懂装懂. 什么是大问题? BS!
#27
触发器 没办法截取.
a字段 里面一条的内容就很多: (Monday)*05:12-11:23,(Tuesday)*10:12-11:23,(Monday)*05:12-11:23,(Tuesday)*10:12-11:23
所以用截取好象不太可行
a字段 里面一条的内容就很多: (Monday)*05:12-11:23,(Tuesday)*10:12-11:23,(Monday)*05:12-11:23,(Tuesday)*10:12-11:23
所以用截取好象不太可行
#28
如果截取的过程比较复杂,可以在数据库自定义函数截取1(),截取2(),
然后再
CREATE TRIGGER trg_ins_A AFTER INSERT ON A
FOR EACH ROW
BEGIN
insert into B(c,d,....) values(截取1(NEW.a列),截取2(NEW.a列)........);
END
在数据库写个函数把(Monday)*05:12-11:23,(Tuesday)*10:12-11:23,(Monday)*05:12-11:23,(Tuesday)*10:12-11:23
截取成想要的结果应该可以实现吧
然后再
CREATE TRIGGER trg_ins_A AFTER INSERT ON A
FOR EACH ROW
BEGIN
insert into B(c,d,....) values(截取1(NEW.a列),截取2(NEW.a列)........);
END
在数据库写个函数把(Monday)*05:12-11:23,(Tuesday)*10:12-11:23,(Monday)*05:12-11:23,(Tuesday)*10:12-11:23
截取成想要的结果应该可以实现吧
#29
Johnson_Hong
疯狂的小猪
你有这方面资料吗, 那触发器里面怎么写处理字段函数呢? 我越问问题越多. 我对数据库这块 用的很少.所以很多不会.
能给传些资料吗? 我油箱 xingqingliang@dhcc.com.cn 谢谢拉!
疯狂的小猪
你有这方面资料吗, 那触发器里面怎么写处理字段函数呢? 我越问问题越多. 我对数据库这块 用的很少.所以很多不会.
能给传些资料吗? 我油箱 xingqingliang@dhcc.com.cn 谢谢拉!
#30
截取我知道用 substring
#31
你可以在网上搜索一下mysql字符串函数,有很多的
#32
a= (Monday)*2312-112312,(Tuesday)*2312-112312
c= Monday,Tuesday
d= 2312-112312,2312-112312
我提供java的代码,你自己替换为SQL语句
我MySQL 的SQl不熟,你自己调整吧
c= Monday,Tuesday
d= 2312-112312,2312-112312
我提供java的代码,你自己替换为SQL语句
String s = "(Monday)*2312-112312,(Tuesday)*2312-1123123";
System.out.println(s.substring(0,s.indexOf("*"))+","+s.substring(s.indexOf(",")+1,s.indexOf("*",s.indexOf(",")+1)));
System.out.println(s.substring(s.indexOf("*")+1,s.indexOf(","))+","+s.substring(s.indexOf("*",s.indexOf(","))+1));
str.indexOf(s) ==> inSTR(str,s)
str.substring(from,to) = substring(field,from,to);
我MySQL 的SQl不熟,你自己调整吧
#33
欢迎JAVA人士加入53633581群,大家在这里可以讨论技术问题!
#34
直接写SQL语句简单多了
弄什么java啊
弄什么java啊
#35
如果是同一个库的话,还是用SQL语句处理好一些.
#36
我还是采用了 用SQL语句去处理了. 触发器想用 但是不会用. 结贴 !!!!!!!! 感谢热心的朋友们帮忙
#1
问题的关键在于那个组合字段如何拆分,如果规则很清楚,单独用SQL 语句就能完成!
当然,你用JAVA调用那个语句也可以,不过.. 没必要吧!
当然,你用JAVA调用那个语句也可以,不过.. 没必要吧!
#2
我想了个办法 就是 当对A表进行增删改查的时候同时对B表也进行同样的操作.
感觉这个方法有点笨.
不知道哪为高手 有更好的办法
感觉这个方法有点笨.
不知道哪为高手 有更好的办法
#3
路过,顶一个~
个人意见:用循环+六个变量。来操作(先取值,然后用SQL插入)。我做过可以。但是速度和性能不是很好! 呵呵,关公面前耍小刀! 呵呵~
个人意见:用循环+六个变量。来操作(先取值,然后用SQL插入)。我做过可以。但是速度和性能不是很好! 呵呵,关公面前耍小刀! 呵呵~
#4
其中a 是 (Monday)*2312-112312,(Tuesday)*2312-112312
现在要拆为 c 对应Monday,Tuesday
d 对应 2312-112312,2312-112312
现在要拆为 c 对应Monday,Tuesday
d 对应 2312-112312,2312-112312
#5
感觉这种数据库内部的数据交互,如果不需要外部加工,用存储过程解决比较好,快还好维护
#6
ls 哥们 能给讲的细点吗? 我对存储过程 了解不多.
#7
自己的贴顶起去!!!
#8
你是要现在整理数据,以后不用做这个导入操作了,还是说在以后每次向a插入数据都要插到b,如果只是这一次导入的话,就写sql搞定,要是每次插入a都要同时去插入b表,就可以在java程序里处理,或者在数据库写个触发器,新增或删除a时顺便向b做操作
#9
直接写个小的java应用,一直读取A表,然后读取A表的同时把A表的数据插入到B表去就行了,虽然效率不是很高,但简单
#10
回8楼, 我的需求就是 每次插入a都要同时去插入b表
A表做什么操作 B表也要做同样的操作.
再弱弱问一下, 主要是B表字段跟A表字段数量不等.要进行个拆分操作 该怎么搞这个触发器呢.
A表做什么操作 B表也要做同样的操作.
再弱弱问一下, 主要是B表字段跟A表字段数量不等.要进行个拆分操作 该怎么搞这个触发器呢.
#11
我数据库是 MYSQL
#12
CREATE TRIGGER trg_ins_A AFTER INSERT ON A
FOR EACH ROW
BEGIN
insert into B(c,d,....) values(截取1(NEW.a列),截取2(NEW.a列)........);
END
FOR EACH ROW
BEGIN
insert into B(c,d,....) values(截取1(NEW.a列),截取2(NEW.a列)........);
END
#13
我想了个办法 就是 当对A表进行增删改查的时候同时对B表也进行同样的操作.
支持你的做法,系统负荷分散,很好
2 我建议你在B里面只保存c,d 已经A表的主键作为外键就行了,这样做一个视图就可以拿到完整的B表了!
支持你的做法,系统负荷分散,很好
2 我建议你在B里面只保存c,d 已经A表的主键作为外键就行了,这样做一个视图就可以拿到完整的B表了!
#14
insert into b select ... from a;
#15
如果两个表中的数据要一一对应的话,插入前把b表数据先删除.
#16
java2000_net 我那样写 觉的数据更新实时 也是最快的吧. B表不能改了.因为这张表也是另一个项目组一起使用的.
比较郁闷.
我当时建议 写成一张表 就没这个麻烦了. 再写个没有实际意义的主键 不听. 比较郁闷.
比较郁闷.
我当时建议 写成一张表 就没这个麻烦了. 再写个没有实际意义的主键 不听. 比较郁闷.
#17
12 楼我还想问一个问题. 一个触发器 只能触发一个操作(insert or delete or update ),还是可以写多个操作.
#18
因为我不仅要插入 还要进行 删除 修改操作
#19
再建个删除的触发器,CREATE TRIGGER trg_del_A AFTER DELETE ON A... 不过b表没有唯一标识的列....
#20
恩,对头,我也赞成用触发器,那样子简单很多,你要拆分a表的两个字段,可以添加一个标志到a变的那列的数据中,遇到那个标志就一个substr。
#21
可以写个小程序,非常简单。
#22
什么简单的方法?
#23
D
#24
insert into b select * from a
2表具有相同的字段,复制a表的内容去b表中
2表具有相同的字段,复制a表的内容去b表中
#25
这种小问题,也要讨论半天?
#26
LS 别不懂装懂. 什么是大问题? BS!
#27
触发器 没办法截取.
a字段 里面一条的内容就很多: (Monday)*05:12-11:23,(Tuesday)*10:12-11:23,(Monday)*05:12-11:23,(Tuesday)*10:12-11:23
所以用截取好象不太可行
a字段 里面一条的内容就很多: (Monday)*05:12-11:23,(Tuesday)*10:12-11:23,(Monday)*05:12-11:23,(Tuesday)*10:12-11:23
所以用截取好象不太可行
#28
如果截取的过程比较复杂,可以在数据库自定义函数截取1(),截取2(),
然后再
CREATE TRIGGER trg_ins_A AFTER INSERT ON A
FOR EACH ROW
BEGIN
insert into B(c,d,....) values(截取1(NEW.a列),截取2(NEW.a列)........);
END
在数据库写个函数把(Monday)*05:12-11:23,(Tuesday)*10:12-11:23,(Monday)*05:12-11:23,(Tuesday)*10:12-11:23
截取成想要的结果应该可以实现吧
然后再
CREATE TRIGGER trg_ins_A AFTER INSERT ON A
FOR EACH ROW
BEGIN
insert into B(c,d,....) values(截取1(NEW.a列),截取2(NEW.a列)........);
END
在数据库写个函数把(Monday)*05:12-11:23,(Tuesday)*10:12-11:23,(Monday)*05:12-11:23,(Tuesday)*10:12-11:23
截取成想要的结果应该可以实现吧
#29
Johnson_Hong
疯狂的小猪
你有这方面资料吗, 那触发器里面怎么写处理字段函数呢? 我越问问题越多. 我对数据库这块 用的很少.所以很多不会.
能给传些资料吗? 我油箱 xingqingliang@dhcc.com.cn 谢谢拉!
疯狂的小猪
你有这方面资料吗, 那触发器里面怎么写处理字段函数呢? 我越问问题越多. 我对数据库这块 用的很少.所以很多不会.
能给传些资料吗? 我油箱 xingqingliang@dhcc.com.cn 谢谢拉!
#30
截取我知道用 substring
#31
你可以在网上搜索一下mysql字符串函数,有很多的
#32
a= (Monday)*2312-112312,(Tuesday)*2312-112312
c= Monday,Tuesday
d= 2312-112312,2312-112312
我提供java的代码,你自己替换为SQL语句
我MySQL 的SQl不熟,你自己调整吧
c= Monday,Tuesday
d= 2312-112312,2312-112312
我提供java的代码,你自己替换为SQL语句
String s = "(Monday)*2312-112312,(Tuesday)*2312-1123123";
System.out.println(s.substring(0,s.indexOf("*"))+","+s.substring(s.indexOf(",")+1,s.indexOf("*",s.indexOf(",")+1)));
System.out.println(s.substring(s.indexOf("*")+1,s.indexOf(","))+","+s.substring(s.indexOf("*",s.indexOf(","))+1));
str.indexOf(s) ==> inSTR(str,s)
str.substring(from,to) = substring(field,from,to);
我MySQL 的SQl不熟,你自己调整吧
#33
欢迎JAVA人士加入53633581群,大家在这里可以讨论技术问题!
#34
直接写SQL语句简单多了
弄什么java啊
弄什么java啊
#35
如果是同一个库的话,还是用SQL语句处理好一些.
#36
我还是采用了 用SQL语句去处理了. 触发器想用 但是不会用. 结贴 !!!!!!!! 感谢热心的朋友们帮忙