我有一个包含以下结构的表
Id Pro_id name price
----------------------------------------
1 001 ABC 200
1 002 XYZ 100
1 003 XYZ 150
2 004 PQR 100
2 005 PQR 100
2 006 LMN 200
2 007 LMN 300
2 008 DEF 150
正如您所看到的,名称'中有一些重复的名称。列。
我想删除所有重复的名称(只需要保留第一个输入的名称并删除剩余的名称)
所以我的表应该看起来像 -
Id Pro_id name price
----------------------------------------
1 001 ABC 200
1 002 XYZ 100
2 004 PQR 100
2 006 LMN 200
2 008 DEF 150
我尝试了以下来获取重复的名称 -
SELECT ID, NAME, count(NAME) FROM TABLENAME
GROUP BY ID, NAME HAVING count(NAME)>1
但现在我无法继续前进,坚持如何删除记录。
任何想法?
答案 0 :(得分:2)
您可以尝试以下SQL(在MySQL中可行)
delete t1.* from tablename t1
inner join
tablename t2 ON t1.name = t2.name
AND t1.Pro_id > t2.Pro_id
答案 1 :(得分:1)
SQL中没有“first”,因为select的顺序通常是未定义的,因此以下内容将为重复的名称保留最小值为Pro_id
的条目,但您可以自由定义不同的聚合器:
DELETE FROM tablename
WHERE Pro_id NOT IN (SELECT MIN(Pro_id) FROM tablename GROUP BY name);
答案 2 :(得分:1)
DELETE FROM table_name
WHERE rowid NOT IN
(
SELECT MIN(rowid)
FROM table_name
GROUP BY column1, column2, column3...
) ;
答案 3 :(得分:0)
您可以尝试这样的事情
delete from table1
where rowid in
(
select rid
from
(
select rowid as rid,
row_number() over (partition by name order by pro_id) as rn
from table1
)
where rn > 1
)
没有测试过它