选择显示字体大小

asp数据库编程sql常用技巧

  三.数据库合并问题

  access里的两个表,想让两个表的内容合并

  表[a]结构如下:

[id] 编号 自动编号
[name] 名称 文本
[price] 价格 数字
[guige] 规格 文本
[changjia] 生产厂家 文本
[baozhuang] 包装 文本
[danwei] 单位 文本


  共有900条记录,除了id和name字段,其他均可以为空

  表[b]结构如下:

[id] 编号 自动编号
[name] 名称 文本
[price] 价格 数字
[changjia] 生产厂家 文本
[danwei] 单位 文本
[xingzhi] 性质 文本


  共有800条记录,除了id和name字段,比表[a]少几个字段,但还多一个[xingzhi]的字符安其它均可以为空

  现在想生成一个新表[c],结构如下,而且内容是两个表的内容之和。

[id] 编号 自动编号
[name] 名称 文本
[price] 价格 数字
[guige] 规格 文本
[changjia] 生产厂家 文本
[baozhuang] 包装 文本
[danwei] 单位 文本
[xingzhi] 性质 文本


  用sql语句也可以,手工操作也好,xml也好,别管怎么着吧,怎么实现呀,哥们要郁闷坏了,真要让我们再输入800条记录,我就挂了。

  回答:

  1.这样

insert into c(id,name,.....)
select id,name,.....
from a
insert into c(id,name,.....)
select max(id)+1,name,.....
from b


  2.更正:

  如果直接在查询分析器里执行:

insert into c(name,.....)
select name,.....
from a
insert into c(name,.....)
select name,.....
from b


  3.用union方法

insert into [c] ([id] ,编号,自动编号)
select [id],编号,自动编号 from [a]
union
select [id],编号,自动编号 from [b]


  4.asp的解决办法

<% '循环检测a表
set rs = server.createobect("adodb.recordset")
rs.open "select * from a order by id",conn,1,1
do while not rs.eof
call actadd(rs("name")) '调用像b表添加内容的函数!
rs.movenext
loop
rs.close
set rs = nothing

sub actadd(txt)
dim ts, sql
sql = "insert into b(name) values('"& txt &"')"
set ts = conn.execute(sql)
ts.close
set ts = nothing
end sub
%>


  5.asp的解决办法

<%
dim arr_temp1,arr_temp2,arr_data
set rs=conn.execute("select id,name,price,guige,changjia,baozhuang,danwei from a")
arr_temp1=rs.getrows
rs.close
set rs=nothing

set rs=conn.execute("select id,name,price,guige,changjia,danwei,xingzhi from b")
arr_temp2=rs.getrows
rs.close
set rs=nothing

rem 开始处理
redim arr_data(ubound(arr_temp1,2)+ubound(arr_temp2,2),7)
rem 把两个数组的内容复制进来
这一部分自己写了做两个循环
然后再存进数据库
%>

  最后转一些经典的sql语句:

  1.蛙蛙推荐:一些精妙的sql语句

  说明:复制表(只复制结构,源表名:a 新表名:b)

sql: select * into b from a where 1<>1

  说明:拷贝表(拷贝数据,源表名:a 目标表名:b)

sql: insert into b(a, b, c) select d,e,f from b;

  说明:显示文章、提交人和最后回复时间

sql: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

  说明:外连接查询(表名1:a 表名2:b)

sql: select a.a, a.b, a.c, b.c, b.d, b.f from a left out join b on a.a = b.c

  说明:日程安排提前五分钟提醒

sql: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

  说明:两张关联表,删除主表中已经在副表中没有的信息

  sql:

delete from info where not exists ( select * from infobz where info.infid=infobz.infid )

  说明:--

  sql:

select a.num, a.name, b.upd_date, b.prev_upd_date

from table1,

(select x.num, x.upd_date, y.upd_date prev_upd_date

from (select num, upd_date, inbound_qty, stock_onhand

from table2

where to_char(upd_date,'yyyy/mm') = to_char(sysdate, 'yyyy/mm')) x,

(select num, upd_date, stock_onhand

from table2

where to_char(upd_date,'yyyy/mm') =

to_char(to_date(to_char(sysdate, 'yyyy/mm') '/01','yyyy/mm/dd') - 1, 'yyyy/mm') ) y,

where x.num = y.num (+)

and x.inbound_qty + nvl(y.stock_onhand,0) <> x.stock_onhand ) b

where a.num = b.num

  说明:--

  sql:

select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源地,高考总成绩

  说明:

   从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)

  sql:

select a.userper, a.tel, a.standfee, to_char(a.telfeedate, 'yyyy') as telyear,

sum(decode(to_char(a.telfeedate, 'mm'), '01', a.factration)) as jan,

sum(decode(to_char(a.telfeedate, 'mm'), '02', a.factration)) as fri,

sum(decode(to_char(a.telfeedate, 'mm'), '03', a.factration)) as mar,

sum(decode(to_char(a.telfeedate, 'mm'), '04', a.factration)) as apr,

sum(decode(to_char(a.telfeedate, 'mm'), '05', a.factration)) as may,

sum(decode(to_char(a.telfeedate, 'mm'), '06', a.factration)) as jue,

sum(decode(to_char(a.telfeedate, 'mm'), '07', a.factration)) as jul,

sum(decode(to_char(a.telfeedate, 'mm'), '08', a.factration)) as agu,

sum(decode(to_char(a.telfeedate, 'mm'), '09', a.factration)) as sep,

sum(decode(to_char(a.telfeedate, 'mm'), '10', a.factration)) as oct,

sum(decode(to_char(a.telfeedate, 'mm'), '11', a.factration)) as nov,

sum(decode(to_char(a.telfeedate, 'mm'), '12', a.factration)) as dec

from (select a.userper, a.tel, a.standfee, b.telfeedate, b.factration

from telfeestand a, telfee b

where a.tel = b.telfax) a

group by a.userper, a.tel, a.standfee, to_char(a.telfeedate, 'yyyy')

  说明:四表联查问题:

sql: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

  说明:得到表中最小的未使用的id号

  sql:

select (case when exists(select * from handle b where b.handleid = 1) then min(handleid) + 1 else 1 end) as handleid

from handle

where not handleid in (select a.handleid - 1 from handle a)

  2.删除重复数据

  一、具有主键的情况

  a.具有唯一性的字段id(为唯一主键)

delete table
where id not in
(
select max(id) from table group by col1,col2,col3...
)

  group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。

  b.具有联合主键

  假设col1+','+col2+','...col5 为联合主键

select * from table where col1+','+col2+','...col5 in (
select max(col1+','+col2+','...col5) from table
where having count(*)>1
group by col1,col2,col3,col4
)

  group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。

  c:判断所有的字段

select * into #aa from table group by id1,id2,....
delete table
insert into table
select * from #aa

  二、没有主键的情况

  a:用临时表实现

select identity(int,1,1) as id,* into #temp from ta
delete #temp
where id not in
(
select max(id) from # group by col1,col2,col3...
)
delete table ta
inset into ta(...)
select ..... from #temp

  b:用改变表结构(加一个唯一字段)来实现

alter table 表 add newfield int identity(1,1)
delete 表
where newfield not in
(
select min(newfield) from 表 group by 除newfield外的所有字段
)

alter table 表 drop column newfield


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons