注册 登录
编程论坛 SQL Server论坛

讨论将查询的多条数据插入到已有的表中

hurtsky 发布于 2008-09-03 17:36, 3922 次点击
有两张表:
 A表有列:姓名,电话号,地址
 B表有列:电话号,通话记录,开始通话时间,通话结束时间

A表与B表没有联系
(假若现在两表中都有满足条件的数据)

   现在我要将在A表中不存在而在B表中有的电话号码查询出来,并且将这些电话号插入到A表中,
而姓名和地址这两列分别用'未知'来替代,如何实现?


本人的做法是将查询出来的数据放在一个视图中,再将视图在的数据插入到A表中,可行
-----------
create view TT
as
 select '未知'as 列1, 电话号 as 列2,'未知' as 列3 from B where 电话号 not in(select 电话号 from A)
-----------
insert into A (姓名,电话号,地址)
select from TT
-------
但觉得有些麻烦,现求各位的新方法,越简单越好!
11 回复
#2
happynight2008-09-03 22:43
insert into A (姓名,电话号,地址)
select '未知'as 列1, 电话号 as 列2,'未知' as 列3 from B where 电话号 not in(select 电话号 from A)
呵呵 走到门口了 又绕了个弯
#3
hurtsky2008-09-06 21:05
楼上那位试过没有?
#4
zhujiuyi2008-09-06 23:09
二楼那个应该可以的。。。不过如果数据量大的话,这个方法速度可能会慢啊
#5
acupoflife2008-09-08 14:53
in 的缺点就是数据量大的时候执行速度慢 因为in会遍历表里的每一行数据。
#6
hurtsky2008-09-08 19:35
那感觉还是用视图好些
#7
happynight2008-09-08 19:44
呵呵 不明白你为什么要用视图 是为了速度吗
对视图没有研究 希望讲下目的和其中的奥秘
#8
happynight2008-09-08 19:48
其实不用IN的话还有一种写法 只是我感觉不到其中速度上的差异
贴出来 欢迎高手讲解下
select '未知'as 列1, B.电话号 as 列2,'未知' as 列3 from B
LEFT JOIN A ON A.电话号=B.电话号
where A.电话号=''

上面的代码只是凭印象写的 很久没用过这种方法了 没有调试过 有问题见谅

[[it] 本帖最后由 happynight 于 2008-9-8 19:49 编辑 [/it]]
#9
hurtsky2008-09-08 19:51
回复 7# happynight 的帖子
没别的,我只是想把查出来的数据先放在视图中
再来从视图中插入会快一点
#10
hurtsky2008-09-08 19:53
回复 8# happynight 的帖子
好象没有将数据插入表中这一部啊?
#11
happynight2008-09-08 19:54
视图的话 就我的理解来说 和存储过程差不多 并没有直接保存数据
所以 你用视图来实现提速的话 是能实现 但并不是你想的那样
#12
hurtsky2008-09-08 20:08
回复 11# happynight 的帖子
虽然视图并没有保存数据,但我认为从一个已经优化查询了的视图表中来插入数据速度应该要快些。
至于我的想加快速度的想法,也就是这个
1