架設有如下資料:
declare @tb table (col1 int,col2 varchar(100))
insert
into @tb values (10,'a'), (11,'b'), (10,'a'), (10,'a'), (10,'a'), (10,'a'), (10,'a'), (11,'b')
select * from @tb
col1
col210a
11b10a
10a10a
10a10a
11b如果想更新或刪除上面資料中的某些行,那麼無法直接用where指定條件。
可以將資料臨時增加乙個需要列再處理。
其實不用額外處理資料,利用sql 內部資料儲存的實體地址也可以定位某行資料。
在sql server 2005裡可以通過%%lockres%%得到資料行對應的物理路徑資訊,在sql server2008裡還可以通過%%physloc%% 得到,用sys.fn_physlocformatter 將得到的binary資料轉換後就是%%lockres%% 的值。
注意上面的是 undocumented function,使用有風險,sys.fn_physlocformatter還有個bug
select
%%physloc%% as
addr,sys.fn_physlocformatter(%%physloc%%) as rowid , * from
@tb
addr
rowid
col1
col2
0x2008000003000000
(3:2080:0)10a
0x2008000003000100
(3:2080:1)11b
0x2008000003000200
(3:2080:2)10a
0x2008000003000300
(3:2080:3)10a
0x2008000003000400
(3:2080:4)10a
0x2008000003000500
(3:2080:5)10a
0x2008000003000600
(3:2080:6)10a
0x2008000003000700
(3:2080:7)11b
假設現在要求重複的資料僅留一行,那麼就可以利用位址來標識。
按如下執行後將僅餘兩行資料
delete t1 from
@tbas t1
inner
join (select col1,col2,max(%%physloc%%) as maxindex from
@tbgroup
by col1,col2) t2 on t1.col1=t2.col1 and t1.col2=t2.col2
where (t1.%%physloc%%)!=t2.maxindex
執行後:
select * from @tb
col1
col210a
11b
oracle中update多行資料
a表aid,aname b表bid,bname 現在假設兩張表裡面的資料行數是相等的,現在要更新a表裡面的每一行的anmae,條件是依據b表裡面的bid 在sql server中好像可以這麼寫 update a set aname b.bname from a a,b b where a.aid b...
db2刪除完全相同的重複資料 什麼是重複資料刪除?
重複資料刪除 通常稱為重複資料刪除 是一項功能,可幫助降低冗餘資料對儲存成本的影響。啟用後,重複資料刪除會檢查卷上的資料 檢查是否存在重複分割槽 優化卷上的可用空間。卷資料集的重複分割槽只儲存一次,並可以壓縮,節省更多空間。重複資料刪除可優化冗餘,而不會損壞資料保真度或完整性。好處 節約硬碟空間 由...
Pandas中根據列的值選取多行資料
選取等於某些值的行記錄 用 df.loc df column name some value 選取某列是否是某一型別的數值 用 isin df.loc df column name isin some values 多種條件的選取 用 df.loc df column some value df o...