zoukankan      html  css  js  c++  java
  • update,delete与INNER JOIN 以及删除重复数据

     最近又有新东东上来啦,哈哈!虽然都是些遇到的一些小问题,不过我觉得还是应该记录在此,以备不时之需,呵~~~~

    一、原来只知道update是可以有inner join ,前几天搞到一个相关东西的时候才知道原来delete也是有inner join .现将两种相关的语法陈列如下,有需要的朋友可以瞄瞄,~~~~~

    SQL:

    UPDATE

    update a

    set a.employeestrid=b.pressworkid

    from cemployee a inner join ccard b on a.cardid=b.cardid  --其实这个大多都知道的,呵~在这里啰嗦了点,嘻嘻~~~

    DELETE

        Delete from econsumedata from econsumedata inner join ccard on econsumedata.cardid=ccard.cardid

     

    我们再讲一下删除重复数据的事情,呵~~~其实删除重复数据我一般就使用两种模式。

    1、   要最简单,就是先把不重复的查询出来,将不重复的数据先存到临时表里,再将正式表的数据全部删除掉,再使用select insert进行数据的插入,当然这咱情况只适用于数据可以停止下来。

    2、   我们经常使用的数据库可能需要你长时间的都在运营,所以前面那种方法就不再可行了,那就需要你直接运行SQL语句,对实际情况进行分析后进行删除,一般我们遇到的重复数据都是大多栏位一样,总会有一个栏们不一样这样的重复数据,请找到这个不一样的栏位,作为一个标志物,再进行利用完成删除重复数据的工作。

    E.G.

    select deviceid,recordid,cardid,cardvalue,usecount,consumemoney,count(cardid) as card,max(consumedate) as data into #temp1 from econsumedata

    where convert(char(10),consumedate,21) between '2006-01-01' and '2007-12-31'

    group by deviceid,recordid,cardid,cardvalue,usecount,consumemoney

    having count(cardid)>1

    order by cardid,usecount        --将相应的不重复的数据查询出来,这里因为其标志本栏位是时间,所以我取了这些重复数据中拥有最大时间的一笔作为正确的数据查询出来放到临时表。

    go

    delete A from econsumedata A

    inner join #temp1 B on A.deviceid=B.deviceid and A.recordid=B.recordid

    and A.cardid=B.cardid and A.cardvalue=B.cardvalue and A.usecount=B.usecount

    and A.consumemoney=B.consumemoney and A.consumedate<>B.data

    --(最后的此条件,如若改成=则表示的是留下来的是这个临时表的那一笔数据,可实现巧妙转换)

    --利用临时表进行以前我们前面所讲到的delete inner join (删除时利用表间关联)来完成删除重复数据的功能.

    go

    drop table #temp1

  • 相关阅读:
    SQLite剖析之功能特性
    SQLite剖析之内核研究
    SQLite剖析之体系结构
    SQLite安装、编译与应用
    实验四 数据库查询--2
    Linux监控一之Nagios的安装与配置
    keepalived原理(主从配置+haproxy)及配置文件详解
    负载均衡之Haproxy配置详解(及httpd配置)
    使用HeartBeat实现高可用HA的配置过程详解
    在Linux安装配置Tomcat 并部署web应用 ( 三种方式 )
  • 原文地址:https://www.cnblogs.com/medci/p/1586115.html
Copyright © 2011-2022 走看看