数据库删除重复数据
1.mysql去重
delete
FROM
table_name
WHERE
(cloimn1
,cloimn2
) IN (
SELECT
t.cloimn1
,t.cloimn2
FROM
(
SELECT
cloimn1
,cloimn2
FROM
table_name
GROUP BY
cloimn1
,cloimn2
HAVING
count(1) > 1
) t
)
AND ID
NOT IN (
SELECT
dt.mindeptno
FROM
(
SELECT
min(ID
) AS mindeptno
FROM
table_name
GROUP BY
cloimn1
,cloimn2
HAVING
count(1) > 1
) dt
)
还有一个就是通过group by分组查询出来数据,存到临时表,删除原表,把临时表改名为原表表名。但是这个方法会丢失掉原来的主键和索引等,若是要在SQL语句里面保留原表的主键等又不太方便,得不偿失的样子。不建议使用。
建表:利用create table *** select ***
这样的方式来建表。
CREATE TABLE temp_table_name
SELECT cloumn1
,cloumn2
,cloumn3
,cloumn4
FROM table_name
GROUP BY name;
删表。
DROP TABLE table_name
;
重命名。
ALTER TABLE temp_table_name
RENAME TO table_name
;
2.sqlservice去重
多字段去重:
delete a from table_name
a where exists(select 1 from table_name
where column1
=a.column1
and column2
=a.column2
and column3
=a.column3
and table_name
ID>a.table_name
ID)
这里在最后使用到的最后一个条件:table_name
ID>a.table_name
ID ,是取得所有比最小ID大的数据,结合上下文的意思就是:去重并保留最小ID的那一条数据
3.oracle去重
delete from "test"
t
where t.ID
not in
(select min(ID
) from "test"
t1 group by t1.AA
);