【问题标题】:set primary key `id`设置主键`id`
【发布时间】:2011-10-24 03:17:30
【问题描述】:

表:

ProductComapny

字段:id,name

ProductComapny 内容 10000 记录。

现在我想要id 设置主键但是已经重复了许多id 录音

1.id怎么设置主键???

2.如何删除重复记录?

3.如何获取重复记录的数量?

在 SqlServer 和 MySql 中使用 SQL

学习

【问题讨论】:

  • 这被标记为mysqlsql server这是什么?
  • sql sql sql sql sql 不管是sql server还是mysql
  • @JNK - 哈哈,好地方。 @ashkufarax - 这很重要,MySQL 和 SQL Server 有不同的操作可供彼此使用;他们以不同的方式,用不同的语法做不同的事情。例如,我的答案在 MySQL 中不起作用。
  • -1 for no matter sql server or mysql - 实际上确实如果你想要一个正确的答案。
  • 在sql server amd mysql中学习

标签: mysql sql sql-server sql-server-2005 sql-server-2008


【解决方案1】:

回答SQL Server - 这在MySQL 中不起作用。请指定哪些人,而不是光顾能够帮助您的人。


获取重复次数:

SELECT id, name, COUNT(*) FROM productCompany GROUP BY id, name

要应用主键,首先删除重复项,如下所示:

WITH sorted AS
(
  SELECT
    ROW_NUMBER() OVER (PARTITION BY id, name) AS duplicate_id,
    id,
    name
  FROM
    productCompany
)
DELETE
  sorted
WHERE
  duplicate_id > 1

然后使用 Management Studio 应用您的主键。

【讨论】:

  • 如何获取重复记录数?
  • 我意识到问题被标记为 SQL Server 和 MySQL。请注意,这里没有 MySQL 中的窗口函数 (ROW_NUMBER() OVER...)。
【解决方案2】:

3.如何获取重复记录的数量?

SELECT id, COUNT(*)
    FROM ProductCompany
    GROUP BY id
    HAVING COUNT(*) > 1

2.如何去除重复记录?

你会如何选择保留哪一个?

【讨论】:

  • HAVING 子句在这种情况下是多余的(无论如何,您不会得到任何不存在 ids 的行,因此没有必要将它们过滤掉)
  • @Piskvor :它说> 1 而不是> 0。这意味着存在但无重复项的记录不会包含在 Joe 的结果中。
  • @Piskvor:HAVING 子句过滤掉 ID 仅出现一次因此不重复的实例。
  • 啊,是的 - 我一直在想“这个特定的 ID 在数据库中有多少次?”并且没有捕捉到“非重复”的 ID。
【解决方案3】:

如果您的问题是关于 MySQL 的,那么可以这样做:

ad 3: SELECT COUNT(*),id FROM ProductComapny GROUP BY id 将为您提供数据库中每个 id 的出现次数(顺便说一句“ProductCom ap ny”?)

广告 2:这取决于您的业务逻辑 - 您想保留哪个?

广告 1:ALTER TABLE ProductComapny ADD PRIMARY KEY(id);

(是的,MySQL/MSSQL 的区别很重要:IIRC 以上都不是 MSSQL 中的有效代码)

【讨论】:

  • 我认为您的查询是有效的 TSQL
  • @JNK:我不确定 SELECT 查询中是否混合了组函数和非组字段;这曾经是 MySQL 独有的怪癖。可能它现在在 TSQL 中实现了? (IDK)
  • @Piskovr - 在 TSQL 中始终允许只要您按非聚合字段分组。 Mysql 允许 SELECT col1, col2, COUNT(*) from table GROUP BY col1 而 TSQL 不允许。
  • @JNK:啊哈!谢谢你的解释:)
【解决方案4】:

如果你强制 mysql 添加一个主键,它将删除所有重复项以便能够成功,你可以强制替换一个带有关键字 ignore 的表,即忽略警告。

ALTER IGNORE TABLE ProductComapny ADD PRIMARY KEY (id);

【讨论】:

    【解决方案5】:

    删除重复条目的一种方法是将它们复制到临时表中,从主表中删除所有重复项,将数据从临时表复制到主表。

    插入临时表
    选择 ID、名称
    来自 ProductCompany
    按 ID、名称分组
    计数(*) > 1

    从 ProductCompany 中删除
    id 在哪里(从 TempTable 中选择 id)

    插入产品公司
    选择 ID、名称
    来自临时表

    这应该可行。
    之后,您可以在 ID 字段上设置主键,因为不会再有重复项。

    【讨论】:

      猜你喜欢
      • 2012-07-03
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多