我面臨與從我的表中洗掉記錄相關的問題。表結構:id | 名字| 姓氏 | 資訊 | 時間戳
我的目標是洗掉所有具有相同 first_name 和時間戳的重復記錄。例子:
- 10,Mariusz,Jablko,Smieszny,1635837167
- 198,Mariusz,Smieszek,Zwariowany,1635837167
- 285,Mariusz,Ogien,Smutny,1635837168
因此,我想洗掉 id = 198 的記錄(與 10 相同的 first_name 和時間戳)。
我試過這樣的事情:
DELETE FROM people p1
INNER JOIN people p2 on p1.first_name = p2.first_name
AND p1.timestamp = p2.timestamp
WHERE p1.id < p2.id
我不知道為什么,但它不起作用。你能告訴我我做錯了什么嗎?
謝謝
uj5u.com熱心網友回復:
如果您使用 SQL Server 使用公共表運算式,以下查詢將洗掉所有重復記錄:
WITH CTE AS(
SELECT *,
RN = ROW_NUMBER()OVER(PARTITION BY first_name ,timestamp ORDER BY timestamp )
FROM people
)
DELETE FROM CTE WHERE RN > 1
uj5u.com熱心網友回復:
您必須告訴 DBMS 要從 ( DELETE p1 FROM ...) 中洗掉兩個表中的哪一個。并且為了保持您需要的較低 IDWHERE p1.id > p2.id而不是WHERE p1.id < p2.id.
DELETE p1
FROM people p1
INNER JOIN people p2 ON p1.first_name = p2.first_name
AND p1.timestamp = p2.timestamp
AND p1.id > p2.id;
演示:https : //dbfiddle.uk/?rdbms=mysql_8.0&fiddle=506708ccceca6217d783b8477f3ec247
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/344739.html
