1. 程式人生 > >mysql刪除重複資料,並保留一條

mysql刪除重複資料,並保留一條

因為系統bug在對所在店鋪的會員進行遮蔽的時候沒有進行查重操作,導致在遮蔽表中出現了重複的資料,所以需要刪除此表中姓名重複的資料,並保留其中的一條。模擬資料如下圖:
模擬資料
第一條sql :

delete from t_black_list where sellerId = 120055122 and names in (
  select names from t_black_list where sellerId = 120055122 and types = 4 group by names having count(names) > 1
)
and id not in (
  select
id from t_black_list where sellerId = 120055122 and types = 4 group by names having count(names) > 1 )

遇到了問題:

遇到You can’t specify target table ‘表名’ for update in FROM clause這樣的錯誤,它的意思是說,不能先select出同一表中的某些值,再update這個表(在同一語句中),即不能依據某欄位值做判斷再來更新某欄位的值。

解決:(中間表過度)

 select * from t_black_list where
sellerId = 120055122 and names in ( SELECT a.names from (select names from t_black_list where sellerId = 120055122 and types = 4 group by names having count(names) > 1) a ) and id not in ( SELECT b.id from (select id from t_black_list where sellerId = 120055122 and types = 4 group by names having
count(names) > 1) b )

注:
mysql group by 會選擇id最小的那個

相關推薦

mysql刪除重複資料保留

因為系統bug在對所在店鋪的會員進行遮蔽的時候沒有進行查重操作,導致在遮蔽表中出現了重複的資料,所以需要刪除此表中姓名重複的資料,並保留其中的一條。模擬資料如下圖: 第一條sql : delete from t_black_list where se

mysql去除重複資料保留

之前寫過的爬蟲裡面,因為種種原因出現了一些重複的資料需要刪除掉。然後發現mysql並沒有直接的去重功能,要自己寫。 查過許多部落格之後發現可以這麼寫。 刪除ppeople 重複的資料,然後重複資料中保留id最小的那一條資料。 delete from people where

MySQL刪除重複資料保留其中最大id的

今天同事寫了個刪除重複資料保留一條記錄的資料庫語句,問我錯在哪兒,正好給大家講講【注:以下語句只單對MYSQL資料庫】 語句 -- 問題: delete from `show` where id not in  (  select MAX(id)

MySQL刪除表中重複資料保留

以為通過命令直接刪除就可以了,總是報錯: delete from test where name in(select name from test as t having count(name)>1) 發現在這隻能建立臨時表格,方法1設計可行: 1. 首先先建立一

SQL Server 刪除重複記錄保留記錄

        有張表格之前沒有設計關鍵欄位的唯一約束,導致有時候執行插入操作時不小心執行了多次就出現了重複記錄,後面重新加入唯一約束,由於已經有了重複記錄,無法新增,需要先刪除重複記錄。         看了網上的一些刪除重複記錄的方法(好像都是轉載於同一篇文章,至少看了

oracle刪除重複資料只留資料

--worked well。可以刪除重複記錄,對於多個欄位也是一樣的原理  delete from T_USER  where id in (select id from T_USER group b

MS SQLSERVER刪除重複資料且只保留

背景:表Per_CheckIn,主要欄位:pid--身份證號,checktime-刷身份證時間,由於誤操作,導致了重複記錄產生,現需將pid和checktime一樣的記錄刪除。具體表結構:CREATE TABLE [Per_CheckIn]( [id] [INT] IDEN

mysqlmysql刪除重複記錄並且只保留

最近在做題庫系統,由於在題庫中添加了重複的試題,所以需要查詢出重複的試題,並且刪除掉重複的試題只保留其中1條,以保證考試的時候抽不到重複的題。 首先寫了一個小的例子: 單個欄位的操作 這是資料庫中的表: 分組: Select 重複欄位 From 表 Grou

Sql Server 刪除重複記錄保留

delete users where ids not in (select min(ids) from users group by userid,username having(count(*)&g

mysql刪除重複記錄保留重複資料中的資料的SQL語句理解

正好想寫一條刪除重複語句並保留一條資料的SQL,網上查了一部分資料寫的很詳細,但還是在這裡寫下自己的理解,以遍後續學習 。如下: 表字段和資料:  SQL語句:  DELETE FROM `user` WHERE id NOT IN(SELECT * FROM(

關於mysql刪除重複記錄保留重複資料中的資料的SQL語句理解

正好想寫一條刪除重複語句並保留一條資料的SQL,網上查了一部分資料寫的很詳細,但還是在這裡寫下自己的理解,以遍後續學習 。如下: 表字段和資料:  SQL語句:  DELETE FROM `user` WHERE id NOT IN(SELECT * FROM(SELE

高效刪除Oracle資料庫中重複資料保留最新的方法

在對資料庫進行操作過程中我們可能會遇到這種情況,表中的資料可能重複出現,使我們對資料庫的操作過程中帶來很多的不便,那麼怎麼刪除這些重複沒有用的資料呢?  重複資料刪除技術可以提供更大的備份容量,實現更長時間的資料保留,還能實現備份資料的持續驗證,提高資料恢復服務水平,方便實

Oracle刪除冗餘資料保留

今天去面試,面試官提了一個問題,刪除oracle中的冗餘資料,只保留id最小的一條。當時沒有想明白,回來認真想了一下,總算有了點思路,現將sql貼出來,歡迎大家批評指正。 假設有這樣一個表city表,表中有兩個欄位,id和name。表中有10條資料。 需要刪除冗餘的資料,

Oracle查詢重複資料刪除保留記錄

前言專案中,在“資源目錄-線上編目”中,資源項子表存在多條重發資料,需要進行資料清理,刪除重發的資料,最終只保留一條相同的資料。操作的表名:R_RESOURCE_DETAILS操作步驟一、重複記錄根據單

MySQL刪除重複資料 保留ID最大值

DELETE a FROM user1 a JOIN ( SELECT user_name, count(*), MAX(id) AS i

MySQL刪除單列重複或多列同時重複保留

在生產環境中,我們有的列是不允許出現重複值的,亦或是某兩列不允許同時重複,但由於前端未做限制,或者沒限制住,出現了單列重複值,或者兩列本應組成唯一組合卻也出現重複,這兩種情況都是不允許的。現在由於前端應用限制不住,要做刪除操作後,新增唯一索引,從資料庫層面進行限制,以下是處

Sql Server 查詢多重複資料 刪除保留

總是不會查重和刪除多餘資料 delete sysdba.PRODUCT from sysdba.PRODUCT a where exists (select Name,ACTUALID fr

oracle刪除重複資料保留

1.刪除單個欄位,如下例子即為刪除學號相同的學生資料,即每個學號記錄一條學生資料 delete from stu t1 where t1.rowid not in ( select min(t2.rowid)

SQL刪除重複資料保留ID最大的

在資料庫中可能會存在重複資料,需要刪除並且保留其中一條 ,這裡我們保留其中id最大的一條 DELETE FROM T_Dat_BankData WHERE BankCode IN ( SELECT BankCode FROM T_Dat_BankData GROUP BY BankC

sql 刪除表中多餘的重複記錄(多個欄位)保留記錄

在網上呢~自己收集了一些關於這方面的知識~  自己整理一下 1.查詢重複記錄 select * from 表名 where 重複欄位 in (select 重複欄位 from 表名 group