--可以檢測到null列重復
delete from [JCXS0201] where USER_ID in(select User_ID u from [JCXS0201] group by User_ID having COUNT(id) >1 ) and id not in (select MIN(id) from [JCXS0201] where USER_ID in( select User_ID from [JCXS0201] group by User_ID having COUNT(id) >1 ) )
--不可以檢測到null列重復
delete from [JCXS0201] where USER_ID in( select User_ID u from [JCXS0201] group by User_ID having COUNT(id) >1 ) and id not in (select MIN(id) from [JCXS0201] group by User_ID having COUNT(id) >1 )
ps:后來反復測試 /2012 10 18
發現in(null,~)其中的Null無效,相當於in(~)
所以這里發現一個問題 :Group By 列時 如果列中含有NULL值
只能通過非null值來描述,如改行的id或者row_number() 函數得到的行號 去處理
上面語句錯誤分析:
將分兩塊來描述,分別是User_ID和ID
一、先看User_ID
1、Group By User_id 后COunt (id)和Count(User_id)得到的不同效果
按到里說 本身有三行User_ID為NULL , Count(NULL)貌似無效
2、接着讓UserId in(NULL,1257646)和User_ID in (1257646)這兩個語句是一致的,前面的NULL被會忽略。
實際上都是 User_ID in (1257646)的效果
在這里是不是可以理解為,sql server中 NULL不是一個值,而是一個默認的狀態
二、再來看分組后的ID
含Grou By User_ID的語句中 不知道是否可以Select ID
如果不可以的話,就不能處理NULL的情況,所以必須用到 Row_NUmber()函數,為其添加行號
這是我的理解,有錯誤請指出