Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2014, 17:21   #1
byte916
Пользователь
 
Регистрация: 04.03.2008
Сообщений: 75
Радость MsSql исправление дубликатов

Есть следующая структура:

Код:
[UsersInGroup]
Id
UserId
GroupId
Код:
[StudyLog]
Id
UserInGroupId
Log
Таблицы связаны по UsersInGroup.Id - StudyLog.UserInGroupId, связь один-ко-многим.

Бывают такие ситуации, когда появляются дубликаты UsersInGroup, т.е. получаются так:

Код:
[UsersInGroup]
Id  UserId  GroupId
11  100     256
12  100     256
13  101     386
14  101     386
У каждой записи из этой таблицы появляются записи в StudyLog

Код:
[StudyLog]
Id  UserInGroupId  Log
1   11             "somelog1"
2   11             "somelog2"
3   11             "somelog3"
4   12             "somelog4"
5   12             "somelog5"
6   13             "somelog6"
7   13             "somelog7"
8   14             "somelog8"
9   14             "somelog9"
Собственно задача - убрать дубликаты из UserInGroup, так чтобы вышло

Код:
[UsersInGroup]
Id  UserId  GroupId
11  100     256
13  101     386
И соответственно в таблице StudyLog все записи которые были связаны с удалёнными дубликатами привязать к тем которые остались

Код:
[StudyLog]
Id  UserInGroupId  Log
1   11             "somelog1"
2   11             "somelog2"
3   11             "somelog3"
4   11             "somelog4"
5   11             "somelog5"
6   13             "somelog6"
7   13             "somelog7"
8   13             "somelog8"
9   13             "somelog9"
Прошу помочь

Последний раз редактировалось byte916; 28.08.2014 в 17:23.
byte916 вне форума Ответить с цитированием
Старый 28.08.2014, 19:37   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Ну сделай userId ключем. Или объяви как UNIQUE.

Вобще ты уверен что тут надо 2 независимых ключа?:
Код:
Id
UserId
rrrFer вне форума Ответить с цитированием
Старый 28.08.2014, 20:33   #3
byte916
Пользователь
 
Регистрация: 04.03.2008
Сообщений: 75
По умолчанию

Я умолчал о третьей таблице
Код:
[Users]
Id
Username
Связь с usersInGroups один ко многим, поэтому уником сделать нельзя

Последний раз редактировалось byte916; 28.08.2014 в 20:37.
byte916 вне форума Ответить с цитированием
Старый 28.08.2014, 20:40   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Связь с usersInGroups один ко многим, поэтому уником сделать нельзя
Интересно, а как ты видишь вообще решение проблемы. Попробуй сам нарисовать руками правильно эти таблицы. Если ниче не получится - то проблема не в СУБД ))
rrrFer вне форума Ответить с цитированием
Старый 29.08.2014, 09:13   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

--РАЗОВО избавиться от дубликатов
Код:
delete from useringroup
where id not in ( select min(id), id_user, id_group from useringroup 
                         group by id_user, id_group )
--сделать СОСТАВНОЙ уникальный индекс
id_user , id_group
Цитата:
Связь с usersInGroups один ко многим, поэтому уником сделать нельзя
--Начать думать откуда берутся эти дубликаты (исправлять программу ввода!)

-Ах, да!!!! СНАЧАЛА надо исправить записи StudyLog
Код:
select id as id_fakt, minid as real
from useringroup
inner join ( select min(id) as minid, id_user, id_group from useringroup
             group by id_user, id_group
          ) as rgroup on rgroup.id_user =useringroup.id_user and rgroup.id_group =useringroup.id_group and rgroup.id<>useringroup.id
-- а теперь КАК-ТО применить это для ЗАМЕНЫ
(update) set useringroupid =real ... where usergroupid=fakt
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 29.08.2014 в 09:16.
evg_m вне форума Ответить с цитированием
Старый 29.08.2014, 09:59   #6
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Бывают такие ситуации, когда появляются дубликаты UsersInGroup, т.е. получаются так:
Это не дубликат , Вы просто не поняли принцип "реляционная база данных" PK - FK Это все книге написано подробно , есть еще интернете много примеры , почитайте и это вопросы отпадут
Изображения
Тип файла: png Дубл.png (11.7 Кб, 120 просмотров)
xxbesoxx вне форума Ответить с цитированием
Старый 29.08.2014, 10:39   #7
byte916
Пользователь
 
Регистрация: 04.03.2008
Сообщений: 75
По умолчанию

Цитата:
Сообщение от xxbesoxx Посмотреть сообщение
Это не дубликат , Вы просто не поняли принцип "реляционная база данных" PK - FK Это все книге написано подробно , есть еще интернете много примеры , почитайте и это вопросы отпадут
Про PK и FK я слышал, но в решении проблемы не помогает.
Это дубликат с точки зрения пользователя.

Последний раз редактировалось byte916; 29.08.2014 в 10:54.
byte916 вне форума Ответить с цитированием
Старый 29.08.2014, 11:59   #8
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Про PK и FK я слышал,
Вы слышали но не поняли для чего в общем это создается . Читать лен да ?
xxbesoxx вне форума Ответить с цитированием
Старый 29.08.2014, 14:38   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

to xxbesoxx
Цитата:
Это не дубликат , Вы просто не поняли принцип "реляционная база данных" PK - FK Это все книге написано подробно
Почитайте про нормальные формы и поймите что это все-таки дубликаты.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 29.08.2014, 21:33   #10
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

To evg_m
Цитата:
Почитайте про нормальные формы и поймите что это все-таки дубликаты.
Да почитаю . Спасибо что сказали .
1. Скажу что структура непонятный
2. Я не буду рассказать то что написано везде ! Но если доработаем это таблицу по нормально !!!
Одно и то же студент может учится на несколько группу. На пример (Математика , Физика , Английский язык)
Вполне возможно что одно и тот же студент учится на это "3" Группу . Или одно и тот же клиент заказал несколько тип товара !!!!!!!!!!!!!!
Что вы меня советуйте почитать ? Этого таблиц нету осмыслений имя и задача тоже не правильно поставлен..... и за этого как то "мутно выглядит"
точка зрения новичок . Он думает что он дубликат . Но повторяю если доработать это таблицу нормально ! Потом не скажет что там дубликат

Последний раз редактировалось xxbesoxx; 29.08.2014 в 21:41.
xxbesoxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Суммирование дубликатов loader1978 Microsoft Office Excel 2 04.03.2013 21:27
Удаление дубликатов Wind-up Bird Microsoft Office Excel 9 02.02.2012 12:49
Удаление дубликатов Deltist Microsoft Office Excel 11 14.01.2011 16:01
поиск дубликатов файлов(имя, тип, размер). Вывод дубликатов на экран с отображением их пути faraon1792 Помощь студентам 4 19.03.2010 23:46
Поиск дубликатов Студент-снова Microsoft Office Excel 10 16.01.2010 18:57