【问题标题】:Ignore/Remove duplicate rows in a column忽略/删除列中的重复行
【发布时间】:2020-04-24 13:34:49
【问题描述】:

我有一个 SQL 表:

表格代码:

CREATE TABLE Gender
(
GenderID int primary key identity,
Gender char(20)
)

我想忽略或删除 Gender 中的重复行,同时保持 GenderID 的自动递增(在我的创建表代码中指定),这样会导致:

----------------
|  1  |  Male  |
----------------
|  2  | Female |
----------------

我的尝试:

DELETE
FROM Gender
WHERE GenderID NOT IN (
  SELECT MIN(GenderID)
  FROM Gender
  GROUP BY Gender)

返回: image

【问题讨论】:

  • ----见编辑----
  • 删除重复项似乎就像删除 id > 2 的任何行并将 id 2 重命名为“女性”一样简单?或者您是否也在问如何更新外键记录?
  • 尝试已完成。是的,GenderID 是另一个表的外键。
  • Gender 表中没有 GenderID = 2 且 Gender = 'Female' 的行

标签: sql-server


【解决方案1】:

您可以创建新表并加载如下给出的值。

DECLARE @datasource TABLE(id int identity(1,1), gender CHAR(10))

INSERT INTO @datasource(gender)
SELECT * FROM 
(
VALUES
('male'),
('male'),
('male'),
('female'),
('female'),
('female')
) as t(gender)

SELECT  ROW_NUMBER() OVER(ORDER BY (SELECT null)) as id, gender 
INTO NewTableName 
FROM @datasource
group by gender

结果集

+----+-----------+
| id |  gender   |
+----+-----------+
|  1 | female    |
|  2 | male      |
+----+-----------+

【讨论】:

    【解决方案2】:

    我建议您删除并重新创建表。 添加 IGNORE_DUP_KEY=ON 的唯一索引以防止重复。

    [Can I set ignore_dup_key on for a primary key?

    【讨论】:

      猜你喜欢
      • 2017-09-18
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 2020-11-09
      • 2021-08-15
      • 2021-05-25
      相关资源
      最近更新 更多