установить первичный ключ "id" - PullRequest
0 голосов
/ 10 августа 2011

Таблица:

ProductComapny

Поля: id name

ProductComapny Содержание 10000 Recdede.

теперь я хочу id установить первичный ключ, но количество id записей было повторено

1.Как можно id установить первичный ключ ???

2.Как можно удалить дубликаты записи?

3.Как узнать количество повторяющихся записей?

BY SQL в SqlServer и MySql

для учебы

Ответы [ 5 ]

5 голосов
/ 10 августа 2011

Отвечено на 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 для применения вашего первичного ключа.

2 голосов
/ 10 августа 2011

3.Как я могу получить количество повторяющихся записей?

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

2.Как можно удалить дубликаты записей?

Как бы вы выбрали, какой из них оставить?

1 голос
/ 10 августа 2011

Если вы заставите mysql добавить первичный ключ, он удалит все дубликаты, чтобы иметь возможность заменить его, вы можете принудительно изменить таблицу с ключевым словом ignore, которое игнорирует предупреждения.

ALTER IGNORE TABLE ProductComapny ADD PRIMARY KEY (id);
1 голос
/ 10 августа 2011

Если ваш вопрос касается MySQL, то подойдет:

ad 3: SELECT COUNT(*),id FROM ProductComapny GROUP BY id даст вам количество экземпляров каждого идентификатора в базе данных (кстати, "ProductCom ap ny"?)

объявление 2: это зависит от вашей бизнес-логики - что вы хотите сохранить?

объявление 1: ALTER TABLE ProductComapny ADD PRIMARY KEY(id);

(да, разница в MySQL / MSSQL имеет значение: IIRC ни один из вышеперечисленных не является допустимым кодом в MSSQL)

0 голосов
/ 10 августа 2011

Один из способов удалить дубликаты записей - это скопировать их во временную таблицу, удалить все дубликаты из основной таблицы, скопировать данные из временной в главную.

вставить в TempTable
выберите идентификатор, имя
от ProductComapny
сгруппировать по идентификатору, имени
с количеством (*)> 1

удалить из ProductComapny
где идентификатор (выберите идентификатор из TempTable)

вставить в ProductComapny
выберите идентификатор, имя
из TempTable

Это должно работать.
После этого вы можете установить первичный ключ в поле ID, так как дубликатов больше не будет.

...