Форум по 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
По умолчанию

да как бы лучше было бы сранвить две таблицы и вытащить те записи ,которых нет во второй таблице
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter