【问题标题】:Remove duplicates (same lines)删除重复项(相同的行)
【发布时间】:2015-09-08 16:19:49
【问题描述】:

我有一个包含两列 ab 的表格。

我可以有这样的数据:

a  | b  
1  | 1  
1  | 3 
1  | 3   
2  | 2   
2  | 3   
2  | 2
2  | 2

在我的示例中,a=2,b=2a=1,b=3 是重复的。

如何从我的表格中删除所有这些重复项?

【问题讨论】:

  • 您还想保留一个 a=2,b=2 行吗?
  • 从表格中删除或显示(选择)而不重复?
  • 从表中删除,每次只保留一行
  • 创建一个副本表,执行 INSERT INTO tmp SELECT DISTINCT a,b FROM original_table。
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?

标签: sql


【解决方案1】:

如果仅用于显示使用DISTINCT

SELECT DISTINCT *
FROM your_table

从旧表中删除(侵入方式),但我想你上面没有任何外键。 (MySql)

CREATE TABLE new_table AS
SELECT DISTINCT * FROM old_table;

DROP TABLE old_table;

RENAME TABLE new_table TO old_table;

更通用的方式(无需删除原始表):

CREATE TABLE old_table_clone(...);

INSERT INTO old_table_clone(...)
SELECT DISTINCT * FROM old_table;

TRUNCATE TABLE old_table;

INSERT INTO old_table(...)
SELECT * FROM old_table_clone;

DROP TABLE old_table_clone;

同样可以使用临时表实现,具体取决于您使用的 RDBMS,例如 TSQL/SQL Server

SELECT DISTINCT * INTO #temp FROM old_table;

TRUNCATE TABLE old_table;

INSERT INTO old_table(...)
SELECT * FROM #temp;

【讨论】:

  • CREATE ... AS SELECT 是产品特定的功能,请指定哪一个!
  • 也可以创建表,添加唯一索引,插入忽略。
  • @jarlh: create table .. as select .. 在 SQL 标准中定义。 select .. into 是非标准功能
  • @a_horse_with_no_name,感谢您的纠正。 (我倾向于忘记非核心功能...特性 T172,“表定义中的 AS 子查询子句”。)
【解决方案2】:

检查: Delete duplicate records using rownum in sql

如果您的数据库中没有 rowid,请添加唯一 ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 2015-11-29
    • 1970-01-01
    • 2021-06-01
    相关资源
    最近更新 更多