MySQL中刪除重複資料只保留一條
阿新 • • 發佈:2018-12-11
用SQL語句,刪除掉重複項只保留一條
在幾千條記錄裡,存在著些相同的記錄,如何能用SQL語句,刪除掉重複的呢 1、查詢表中多餘的重複記錄,重複記錄是根據單個欄位(peopleId)來判斷
SELECT * FROM people WHERE peopleId IN ( SELECT peopleId FROM people GROUP BY peopleId HAVING count(peopleId) > 1 )
2、刪除表中多餘的重複記錄,重複記錄是根據單個欄位(peopleId)來判斷,只留有rowid最小的記錄
DELETE FROM people WHERE peopleName IN ( SELECT peopleName FROM people GROUP BY peopleName HAVING count(peopleName) > 1 ) AND peopleId NOT IN ( SELECT min(peopleId) FROM people GROUP BY peopleName HAVING count(peopleName) > 1 )
3、查詢表中多餘的重複記錄(多個欄位)
SELECT
*
FROM
vitae a
WHERE
(a.peopleId, a.seq) IN (
SELECT
peopleId,
seq
FROM
vitae
GROUP BY
peopleId,
seq
HAVING
count(*) > 1
)
4、刪除表中多餘的重複記錄(多個欄位),只留有rowid最小的記錄
DELETE
FROM
vitae a
WHERE
(a.peopleId, a.seq) IN (
SELECT
peopleId,
seq
FROM
vitae
GROUP BY
peopleId,
seq
HAVING
count(*) > 1
)
AND rowid NOT IN (
SELECT
min(rowid)
FROM
vitae
GROUP BY
peopleId,
seq
HAVING
count(*) > 1
)
5、查詢表中多餘的重複記錄(多個欄位),不包含rowid最小的記錄
SELECT
*
FROM
vitae a
WHERE
(a.peopleId, a.seq) IN (
SELECT
peopleId,
seq
FROM
vitae
GROUP BY
peopleId,
seq
HAVING
count(*) > 1
)
AND rowid NOT IN (
SELECT
min(rowid)
FROM
vitae
GROUP BY
peopleId,
seq
HAVING
count(*) > 1
)
6.消除一個欄位的左邊的第一位:
UPDATE tableName
SET [ Title ]= RIGHT ([ Title ],(len([ Title ]) - 1))
WHERE
Title LIKE '村%'
7.消除一個欄位的右邊的第一位:
UPDATE tableName
SET [ Title ]= LEFT ([ Title ],(len([ Title ]) - 1))
WHERE
Title LIKE '%村'
8.假刪除表中多餘的重複記錄(多個欄位),不包含rowid最小的記錄
UPDATE vitae
SET ispass =- 1
WHERE
peopleId IN (
SELECT
peopleId
FROM
vitae
GROUP BY
peopleId
可能會遇到You can't specify target table '表名' for update in FROM clause這樣的錯誤,它的意思是說,不能先select出同一表中的某些值,再update這個表(在同一語句中),即不能依據某欄位值做判斷再來更新某欄位的值。
1、資料準備
product表資料如下:
laptop表資料如下:
2、要求:#刪除所有不生產印表機廠商生產的膝上型電腦
第一步:對aptop表進行操作
操作沒有問題,按照本思路對product表進行操作
產生You can't specify target table '表名' for update in FROM clause錯誤
3、問題解決
將SELECT出的結果再通過中間表SELECT一遍,這樣就規避了錯誤。
需要注意的是,這個問題只出現於MySQL,MSSQL和Oracle不會出現此問題。