`
阅读更多

出自:http://blog.csdn.net/etmonitor/

一.怎样删除一个表中某个字段重复的列呀,举个例子
表[table1]
id    name
1 aa
2 bb
3 cc
1 aa
2 bb
3 cc
我想最后的表是这样的
id    name
1 aa
2 bb
3 cc
回答:
将记录存到临时表#t中,重复的记录只存一条,然后将临时表#t中的记录再存回原表中,注意“select distinct id,class,name”要包含你需要的所有字段,否则有些字段就被删掉了。
在查询管理器里执行下面代码:
-----------------------------
SELECT DISTINCT id,, name
INTO #t
FROM table1 DELETE table1
          INSERT
        INTO table1
                  SELECT *
                FROM #t
------------------------------
二.找出既会VB又会PHP的人
表是这样的:
ID 员工 技能
1 1 VB
2 1 PHP
3 1 ASP
4 2 PHP
5 3 ASP
6 4 VB
7 4 ASP
要从这张表中找出既会VB又会PHP的人,SQL该怎么写啊?
回答:
---------------------------------------------------------------------------------------------
SELECT 员工 FROM [Table] WHERE 员工 IN(SELECT 员工 FROM [Table] WHERE 技能='VB' ) AND 技能='PHP'
----------------------------------------------------------------------------------------------
三.数据库合并问题
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') &brvbar;&brvbar; '/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

分享到:
评论

相关推荐

    Top 200 Oracle PLSQL Tips for Tuning

    标题“Top 200 Oracle PL/SQL Tips for Tuning”以及描述同样提到的“Top 200 Oracle PL/SQL Tips for Tuning”,明确指出该文档旨在提供一系列针对Oracle PL/SQL性能调优的实用技巧。这表明文档的核心内容将围绕...

    SQL编程实用大全(精华版).part1

    &lt;br&gt;http://images.china-pub.com/ebook25001-30000/25722/shupi.gif&lt;br&gt;&lt;br&gt;&lt;br&gt;【原 书 名】 SQL Tips & Techniques 【原出版社】 Prima Publishing 【作 者】(美)Konrad King 【译 者】 杜大鹏...

    ArcGIS之SQL篇

    ArcGIS 中的 SQL tips * ArcGIS 中的 SQL 语句需要根据不同的存储类型选择正确的 SQL 语法。 * 在使用字段计算器计算字段时,SQL 语法不适用。 * 在使用模糊查询时,需要使用正确的 wildcard 字符,例如 %、_ 等。 ...

    迷你版SQL2000服务器

    +增加SQL Tips页,记录一些常用的SQL语句,方便查阅; ^标题栏解锁界面和密码修改页面进行调整,增加多语言支持。 1.2.2 *附加数据库时,修正输入库名时点取消后没有中止附加等错误; +增加面板锁,点击左上角的...

    迷你SQL2000

    +增加SQL Tips页,记录一些常用的SQL语句,方便查阅; ^标题栏解锁界面和密码修改页面进行调整,增加多语言支持。 1.2.2 *附加数据库时,修正输入库名时点取消后没有中止附加等错误; +增加面板锁,点击左上角的...

    SQL编程实用大全(精华版).part3

    &lt;br&gt;http://images.china-pub.com/ebook25001-30000/25722/shupi.gif&lt;br&gt;&lt;br&gt;&lt;br&gt;【原 书 名】 SQL Tips & Techniques 【原出版社】 Prima Publishing 【作 者】(美)Konrad King 【译 者】 杜大鹏...

    SQL编程实用大全(精华版).part2

    &lt;br&gt;http://images.china-pub.com/ebook25001-30000/25722/shupi.gif&lt;br&gt;&lt;br&gt;&lt;br&gt;【原 书 名】 SQL Tips & Techniques 【原出版社】 Prima Publishing 【作 者】(美)Konrad King 【译 者】 杜大鹏...

    如何使用SQL Server校勘功能

    而`SELECT collation_name FROM master.sys.databases WHERE Name='SQLTips'`则可以用来查看特定数据库的当前校勘设置。 总的来说,理解并熟练使用SQL Server的校勘功能对于管理和维护多语言、多文化的数据至关重要...

    sql小tips初步了解

    ### SQL小Tips初步了解 #### 一、SQL基础概述 SQL(Structured Query Language)是一种用于管理关系数据库的标准语言。它不仅被广泛应用于各种数据库管理系统中,而且是数据处理领域不可或缺的一部分。本文将介绍...

    SQL Server Tips.zip_Help!_ballk1b_sql

    "SQL Server Tips.zip_Help!_ballk1b_sql"这个压缩包文件显然提供了与SQL Server相关的帮助文档,旨在解决用户遇到的问题或提供解决方案。下面将详细讨论SQL Server的一些核心知识点和实用技巧。 1. **查询优化**:...

    DB2 SQL Tuning Tips for Developers

    本次Webinar "DB2 SQL Tuning Tips for Developers" 主要目标是帮助开发者了解导致性能问题的关键因素,掌握优化技巧,并建立良好的SQL编码标准。 首先,我们需要关注的是不良的编码习惯。非可索引的谓词(Non-...

    Pro LINQ: Language Integrated Query in C# 2010 (含源码)

    LINQ to SQL Tips and Tools LINQ to SQL Database Operations LINQ to SQL Ent ity Classes The LINQ to SQL DataContext LINQ to SQL Concurrency Conflicts Additional LINQ to SQL Capabilities LINQ to ...

    Transact-SQL SQL Server Performance Tuning Tips.pdf

    ### Transact-SQL SQL Server 性能调优技巧 #### 概述 本文档主要针对SQL Server中的Transact-SQL查询进行性能优化提供了一系列实用的建议。这些技巧旨在帮助数据库管理员(DBA)和开发人员识别并解决可能导致查询...

    Python中防止sql注入的方法详解

    ### Python中防止SQL注入的方法详解 #### 前言 SQL注入是一种常见的网络安全攻击手段,攻击者通过在输入数据中嵌入恶意SQL代码,利用应用程序的漏洞执行非法操作,如篡改、删除或检索敏感数据等。对于使用Python...

    Top 10 Tips for Optimizing SQL Server Performance

    ### SQL Server性能优化十大技巧详解 #### 引言 在SQL Server环境中实现高效稳定的性能是一项挑战性的任务。尽管关于性能优化的一般性建议随处可见,但针对特定问题的深入指导及如何将这些知识应用到实际环境中的...

    Professional Microsoft SQL Server 2012 Administration

    Loaded with unique tips, tricks, and workarounds for handling the most difficult SQL Server admin issues, this how-to guide deciphers topics such as performance tuning, backup and recovery, scaling ...

    SQL.Tips.And.Techniques.part1

    各种各样的SQL技巧和技术,非常好的SQL参考资料,强烈推荐

    Sql优化.ppt

    SQL 查询优化 SQL 查询优化是数据库优化的重要部分,查询优化器是 SQL SERVER 中的一个组件,可以自动优化查询语句,提高查询效率。本文将详细介绍查询优化器的工作原理、SARG 的定义和应用、查询优化的 tips 等。 ...

Global site tag (gtag.js) - Google Analytics