设置主键`id`

时间:2011-08-10 14:05:51

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

表:

ProductComapny

字段:idname

ProductComapny内容10000记录。

现在我希望id设置主键但是已经重复了多次id次录音

1.how can id设置主键???

2.如何删除重复记录?

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

在SqlServer和MySql中使用BY SQL

学习

5 个答案:

答案 0 :(得分:5)

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应用主键。

答案 1 :(得分:2)

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

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

2.如何删除重复记录?

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

答案 2 :(得分:1)

如果你的问题是关于MySQL,那么这将是:

广告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中的有效代码)

答案 3 :(得分:1)

如果你强制mysql添加一个主键,它将删除所有副本以便能够执行,你可以强制替换一个表whit的关键字ignore,忽略警告。

ALTER IGNORE TABLE ProductComapny ADD PRIMARY KEY (id);

答案 4 :(得分:0)

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

插入TempTable
选择id,名称
来自ProductComapny
按ID分组,名称
有计数(*)> 1个

从ProductComapny中删除
其中id为(从TempTable中选择id)

插入ProductComapny
选择id,名称
来自TempTable

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