Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.10.2009, 11:08
letair letair вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 33
Репутация: 10
По умолчанию Уалить одинаковые строки

Есть 2 таблицы общая и вторая таблица взятая из общей по некоторому фильтру где записей на 1 т меньше. Таблицы состоят из 2 колонок: фамилия имя отчество, дата рождения. Таблицы в DBF перенесены из Ексель.

записей в общей таблице 13 тыс людей, а во второй 12 т. Мне нужно сравнить и вытащить из общей таблицы 1т. людей, которые не попали в отфильрованную вторую таблицу по одному фильтру. По идее у нас обе таблицы должны иметь одинаковое кол. людей, но они отличаются на 1 т. и мы не можем понять кто из общего списка не попал во второй список
как составить массив удаления одинаковых записей, которые в первой и второй таблице и оставить тех кто из общей не попал во вторую таблицу? подскажите примерно я с базами не очень умею или запрос в SQL составить

Последний раз редактировалось letair, 17.10.2009 в 11:24.
Ответить с цитированием
  #2  
Старый 17.10.2009, 11:30
letair letair вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 33
Репутация: 10
По умолчанию

примерно алгоритм такой:
берем запись в 1 таблице(общая которая 13т.чел.) сравниваем со всеми записями во второй таблице (которые взяты из общей но с некоторым фильтром 12 т.чел.), если находится точно такая же - удалем строчку в Общей таблице, если не находится - оставляем. Таким образом каждую строку общей таблицы сверяем со второй до тех пор пока не удалим все 12 т. чел в общей таблице и не останется эта нужная нам 1 т.
Ответить с цитированием
  #3  
Старый 17.10.2009, 12:22
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Если сможете выполнить запрос к табле то так можно получить тех кто повторяется:
Код:
SELECT [Фамилия Имя Отчество], ДатаРожд
FROM Table1
GROUP BY [Фамилия Имя Отчество], ДатаРожд
HAVING Count(*)>1;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 17.10.2009, 12:36
letair letair вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 33
Репутация: 10
По умолчанию

у меня создано две таблицы отдельно Table1 (13тыс чел) и Table2 (12тыс чел), в них одинаковые поля FIO и DR
Вот как сделать запрос в SQL или в обработчике события на кнопке, чтобы вышли только те записи, которых нет в Table2 , около 1 тыс, они по идее должны быть там, но 1 тыс. куда то потерялась, вот хотим список вытащить для разбирательства, почему они там отсутствуют
Ответить с цитированием
  #5  
Старый 17.10.2009, 12:52
letair letair вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 33
Репутация: 10
По умолчанию

а как в SQL Explorer результаты SQL запроса вывести в ексель? делаю там сохранить в файл, а он запрос сам сохраняет мне. В MSSQL сохраняет в файл а здесь нет, MSSQL ставить не хочется
Ответить с цитированием
  #6  
Старый 17.10.2009, 13:05
letair letair вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 33
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Если сможете выполнить запрос к табле то так можно получить тех кто повторяется:
Код:
SELECT [Фамилия Имя Отчество], ДатаРожд
FROM Table1
GROUP BY [Фамилия Имя Отчество], ДатаРожд
HAVING Count(*)>1;

этот запрос натолкнул на мысль, что если я две таблицы запишу в одну, будет 25 тыс записей и выполнить запрос:

Код:
SELECT Fio,GR
FROM общее1
GROUP BY Fio,GR
HAVING Count(*)=1;

и получу список как раз тех кто встречается только 1 раз, а не 2 и более и будет примерно та самая оставшаяся 1 тыс людей, которые не попали во вторую таблицу?
Ответить с цитированием
  #7  
Старый 17.10.2009, 13:19
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Что-то я запутался, вам надо получить в итоге список из уникальных записей что-ли? Т.е. убрать повторы? Если так, то:
Код:
delete from Table1
where id in (
SELECT Max(id)
FROM Table1
GROUP BY [Фамилия Имя Отчество], ДатаРожд
HAVING Count(*)>1)
Только надо иметь в Table1 уникальный идентификатор id
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #8  
Старый 17.10.2009, 13:29
letair letair вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 33
Репутация: 10
По умолчанию

да как бы лучше было бы сранвить две таблицы и вытащить те записи ,которых нет во второй таблице
Ответить с цитированием
  #9  
Старый 17.10.2009, 13:31
letair letair вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 33
Репутация: 10
По умолчанию

попробовал этот код, id в таблице нет
Ответить с цитированием
  #10  
Старый 17.10.2009, 13:34
letair letair вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 33
Репутация: 10
По умолчанию

может в екселе добавить это поле
Ответить с цитированием
  #11  
Старый 17.10.2009, 14:00
letair letair вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 33
Репутация: 10
По умолчанию

добавил в ексель ID и удалил в общем списке двойников (которые не должны были быть в принципе, но были 200 штук)
попытался добавить в список этот тех кто во второй таблице, чтобы удалить получившихся двойников и оставить тех кто не попал во вторую таблицу, но новый список не сохраняется никак почему то

ps

получилось сделать общую таблицу из 25тыс записей, удаляю двойников
скрипт удаляет полностью тех кто встречается 2 и более раз, или оставляет из 2,3 записей одну? Мне тогда нужно чтобы он вообще удалил тех кто дважды и трижды, оставил только тех, кто изначально встречается в таблице однажды

после выполнения скрипта осталось из 25 т - 15 т., а надо чтобы около 1 т. осталось, то есть не верный скрипт для меня, видимо он из двух и трех одинаковых оставляет одну запись, а надо чтобы он их вообще грохал ...

Последний раз редактировалось letair, 17.10.2009 в 14:13.
Ответить с цитированием
  #12  
Старый 17.10.2009, 14:03
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ну тогда можно так попробовать:
Код:
delete from Table1
where ([Фамилия Имя Отчество]+ДатаРожд) in (
SELECT ([Фамилия Имя Отчество]+ДатаРожд)
FROM Table1
GROUP BY [Фамилия Имя Отчество], ДатаРожд
HAVING Count(*)>1)
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #13  
Старый 17.10.2009, 14:05
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Единственное узкое место, это сцепление ФИО и Д, возможно потребуется предварительное преобразование даты в строку или не + а & надо использовать.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #14  
Старый 17.10.2009, 14:15
letair letair вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 33
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Единственное узкое место, это сцепление ФИО и Д, возможно потребуется предварительное преобразование даты в строку или не + а & надо использовать.
Дата у меня как строка идет
Ответить с цитированием
  #15  
Старый 17.10.2009, 14:22
letair letair вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 33
Репутация: 10
По умолчанию

ошибка Expressions in group by are not supported.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter