把N个数据库整合到1个数据库中

nsman 2008-02-19 03:48:46
数据库中表结构相同,表中有很多重复记录,现在想把把这N个数据库合为一个,另外每张表加条字段,记录是属于哪个数据库的,如果数据库n1,n2中都有这条记录,则另加的字段值为"n1,n2",用asp,vb,C#实现均可,愿诸多侠兄,侠姐指点一二,怎么做效率比较高一点?是ACCESS 数据库
...全文
108 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyann 2008-02-20
  • 打赏
  • 举报
回复

如果是一次性工作,效率就无所谓了

日常操作的话
则建议逐个数据库把数据读入目标表

== 思想重于技巧 ==
nsman 2008-02-20
  • 打赏
  • 举报
回复
谢谢了,这是种办法,但如果newtable中的字段很多(10个以上)的话,union +group by执行效率是不是太慢,更致命的是相同结构的表不是在同一个数据库中, 跨数据库链接虽然能实现,"花销"好像就更大了.我是想分出些逻辑判断让程序处理,楼上的用"replace"替换还是让我写到新东西,先谢过了!
OracleRoob 2008-02-20
  • 打赏
  • 举报
回复
如果是同一台机器上,可以使用如下两种方式访问另一个MDB:

(1)其中表名是在db2中的表名
SELECT * from 表名 in 'C:\db2.mdb'

(2)其中表名是在db2中的表名
select * from [;database=C:\db2.mdb].表名


追加到本机的另一个MDB中:

insert into 目标MDB的表名(字段列表) in 'C:\db2.mdb' select 字段列表 from 当前MDB的表名

insert into [;database=C:\db2.mdb].目标MDB的表名(字段列表) select 字段列表 from 当前MDB的表名
liuyann 2008-02-19
  • 打赏
  • 举报
回复

5、6个数据库,包含的表是相同的

 insert into newTable (fd01,fd02,fd03,sourceTable) 
select fd01,fd02,fd03,sum(tb)
from (
SELECT fd01,fd02,fd03,1 as tb
FROM Table1
union
SELECT fd01,fd02,fd03,20 as tb
from Table2
union
SELECT fd01,fd02,fd03,300 as tb
from Table3
union
SELECT fd01,fd02,fd03,4000 as tb
from Table4
union
SELECT fd01,fd02,fd03,50000 as tb
from Table5)
group by fd01,fd02,fd03



update newTable
set sourceTable=replace(sourceTable,"1","Table1,")


update newTable
set sourceTable=replace(sourceTable,"2","Table2,")


== 思想重于技巧 ==
nsman 2008-02-19
  • 打赏
  • 举报
回复
先谢谢,再仔细看,是5、6个数据库,包含的表是相同的,表的结构是一样的
liuyann 2008-02-19
  • 打赏
  • 举报
回复

用ASP,VB,C#也可

打开
SELECT fd01,fd02,fd03,1 as tb
FROM Table1
union
SELECT fd01,fd02,fd03,20 as tb
from Table2
union
SELECT fd01,fd02,fd03,300 as tb
from Table3
union
SELECT fd01,fd02,fd03,4000 as tb
from Table4
union
SELECT fd01,fd02,fd03,50000 as tb
from Table5)

然后 foreach(datarow row in table.rows)



=========================================================
可加入QQ群
49592594 / 19055578
晚19:00 - 24:00在线
=========================================================

== 思想重于技巧 ==
liuyann 2008-02-19
  • 打赏
  • 举报
回复

如大于9则可用1,2,4,8,二进制,生成表后再处理一下
.
== 思想重于技巧 ==
liuyann 2008-02-19
  • 打赏
  • 举报
回复

CASE 1
N个表 (N<=9)
sourceTable字段则代表原表名, 如521,则意味table5,table2,tabl1,生成表后可以在用replace函数 replace(sourceTable,"5","Table5,")


insert into newTable (fd01,fd02,fd03,sourceTable)
select fd01,fd02,fd03,sum(tb)
from (
SELECT fd01,fd02,fd03,1 as tb
FROM Table1
union
SELECT fd01,fd02,fd03,20 as tb
from Table2
union
SELECT fd01,fd02,fd03,300 as tb
from Table3
union
SELECT fd01,fd02,fd03,4000 as tb
from Table4
union
SELECT fd01,fd02,fd03,50000 as tb
from Table5)
group by fd01,fd02,fd03

.
== 思想重于技巧 ==
liuyann 2008-02-19
  • 打赏
  • 举报
回复

N个数据库?
还是N个表?
N个表的话SQL就行


== 思想重于技巧 ==

7,732

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧