程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> update,delete與INNER JOIN 以及刪除重復數據

update,delete與INNER JOIN 以及刪除重復數據

編輯:關於SqlServer

一、原來只知道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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved