鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ 在mysql中,這個(gè)sql怎么解決?

在mysql中,這個(gè)sql怎么解決?

圖片描述

DELETE FROM tusers WHERE (code,name) in(SELECT code,name FROM tusers GROUP BY code,name HAVING COUNT(*) > 1)

為什么這樣寫不行?這個(gè)該怎么寫?

回答
編輯回答
貓小柒

自己提問(wèn)自己解答:DELETE s FROM tusers s WHERE s.id in (SELECT t.rid FROM (SELECT MAX(id) rid FROM tusers GROUP BY code,name HAVING COUNT(*) > 1) t)
在mysql中,刪除記錄有別名的時(shí)候,要在delete后面也加上個(gè)別名,否則報(bào)錯(cuò)。

2017年9月15日 05:03
編輯回答
厭惡我

解決沒(méi)?(毫無(wú)責(zé)任感),就是你的唯一是 code,name 為一組的唯一是么?

2017年11月14日 18:42
編輯回答
筱饞貓
 --針對(duì)像你這樣主鍵自增長(zhǎng)不相同,其他字段數(shù)據(jù)都相同的情況適用
 
Delete from [tusers] where id not in
(
        SELECT MAX(id)        --max(id) 也可以改成:min(id)

        FROM [tusers]

        GROUP BY code,name    --需要剔除那幾個(gè)用于判斷重復(fù)的字段,則將它們放在group by語(yǔ)句之后
)
2017年6月28日 06:30
編輯回答
陌上花
  • 為什么這樣寫不行

    (SELECT code,name FROM tusers GROUP BY code,name HAVING COUNT(*) > 1)

    選擇出了所有重復(fù)的code,name,正確

    DELETE FROM tusers WHERE (code,name) in ...

    重復(fù)項(xiàng)全都刪了,沒(méi)留下最后一個(gè),所以錯(cuò)誤

  • 該怎么寫
    提示:select min(id)選出要留下的最后一個(gè),not in刪掉其他的。
2017年1月4日 21:08