日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQL刪除表中重復(fù)數(shù)據(jù)的兩種方法

SQL表中如果出現(xiàn)重復(fù)的記錄,就需要進(jìn)行刪除,下面將為您介紹其中的兩個版本方法,供您參考,希望對您有所幫助。

目前成都創(chuàng)新互聯(lián)公司已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計、阜新網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

版本一:由于記錄有自增列,所以自增列可以做為記錄的唯一標(biāo)識,由此可見,重復(fù)的記錄的自增ID是一個遞增關(guān)系,這里我們可以只保留ID最小的那條記錄,其它的全部刪除。利用一個嵌套語句就非常容易寫出下面的SQL。其中的sname,saddress是記錄除了ID外的所有列。

DELETE  FROM a
WHERE   id NOT IN ( SELECT  MIN(id)
                    FROM    a
                    GROUP BY sname,
                            saddress )

 版本二:充分利用SQL05的幾個比較實用的特性。這里先簡單說說要用到的幾個特性。詳細(xì)用法可到網(wǎng)上搜索下。

 1:ROW_NUMBER,它的作用就是用來生成行號,默認(rèn)是從1開始。

2:公用表表達(dá)式(CTE),我這里并不會利用它的遞歸,而是用它來簡化嵌套查詢及對表自身引用功能。CTE的語法如下:

[ WITH [ ,n ] ]
::=
        expression_name [ ( column_name [ ,n ] ) ]
    AS
        ( CTE_query_definition )

說明:1>CTE在某種程序上相當(dāng)表變量或者臨時表的功能。但比起表變量來說它***的優(yōu)勢是對自身的引用,CTE語句后面緊跟的select ,update,delete等,操作的結(jié)果都會直接反應(yīng)的實際物理表中。相比臨時表,***優(yōu)勢無非是性能,臨時表實際是一張物理存在的表,在對它進(jìn)行操作時,會產(chǎn)生額外的IO開銷以及管理上的開銷。

2>CTE語法后面需要直接跟上使用CTE的相關(guān)語句select ,update,delete等,否則CTE會失效,下面的語句是錯誤的:

WITH   b AS ( SELECT   ROW_NUMBER() OVER ( PARTITION BY sname, saddress ORDER BY sname, saddress ) AS rn,
                        *
               FROM     a
             )
    DELETE  FROM b
    WHERE   rn > 1
 SELECT * from a
 SELECT * FROM b WHERE rn>1
3:PARTITION BY,分區(qū)函數(shù)。和聚合函數(shù)不同的地方在于它能返回一個分組中的多條記錄,聚合函數(shù)一般只有一條反映統(tǒng)計值的記錄,partition  by用于給結(jié)果集分組,如果沒有指定那么它把整個結(jié)果集作為一個分組 。

經(jīng)過上面的三個關(guān)鍵字的介紹后,下面給出三者相結(jié)合后的結(jié)果。

WITH   b AS ( SELECT   ROW_NUMBER() OVER ( PARTITION BY sname, saddress ORDER BY sname, saddress ) AS rn,
                        *
               FROM     a
             )
    DELETE  FROM b
    WHERE   rn > 1
版本一和版本二比較:

1:版本二更加容易閱讀。

2:版本二性能較版本一強。我們可以通過以以信息來看??梢钥吹桨姹疽粫l(fā)生兩次表掃描。

Table 'a'. Scan count 2, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 1, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(0 row(s) affected)
Table 'a'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

(0 row(s) affected)

 


當(dāng)前題目:SQL刪除表中重復(fù)數(shù)據(jù)的兩種方法
分享鏈接:http://www.dlmjj.cn/article/dpeppci.html