|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Уалить одинаковые строки
Есть 2 таблицы общая и вторая таблица взятая из общей по некоторому фильтру где записей на 1 т меньше. Таблицы состоят из 2 колонок: фамилия имя отчество, дата рождения. Таблицы в DBF перенесены из Ексель.
записей в общей таблице 13 тыс людей, а во второй 12 т. Мне нужно сравнить и вытащить из общей таблицы 1т. людей, которые не попали в отфильрованную вторую таблицу по одному фильтру. По идее у нас обе таблицы должны иметь одинаковое кол. людей, но они отличаются на 1 т. и мы не можем понять кто из общего списка не попал во второй список как составить массив удаления одинаковых записей, которые в первой и второй таблице и оставить тех кто из общей не попал во вторую таблицу? подскажите примерно я с базами не очень умею или запрос в SQL составить Последний раз редактировалось letair, 17.10.2009 в 11:24. |
#2
|
|||
|
|||
примерно алгоритм такой:
берем запись в 1 таблице(общая которая 13т.чел.) сравниваем со всеми записями во второй таблице (которые взяты из общей но с некоторым фильтром 12 т.чел.), если находится точно такая же - удалем строчку в Общей таблице, если не находится - оставляем. Таким образом каждую строку общей таблицы сверяем со второй до тех пор пока не удалим все 12 т. чел в общей таблице и не останется эта нужная нам 1 т. |
#3
|
||||
|
||||
Если сможете выполнить запрос к табле то так можно получить тех кто повторяется:
Код:
SELECT [Фамилия Имя Отчество], ДатаРожд FROM Table1 GROUP BY [Фамилия Имя Отчество], ДатаРожд HAVING Count(*)>1; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
|||
|
|||
у меня создано две таблицы отдельно Table1 (13тыс чел) и Table2 (12тыс чел), в них одинаковые поля FIO и DR
Вот как сделать запрос в SQL или в обработчике события на кнопке, чтобы вышли только те записи, которых нет в Table2 , около 1 тыс, они по идее должны быть там, но 1 тыс. куда то потерялась, вот хотим список вытащить для разбирательства, почему они там отсутствуют |
#5
|
|||
|
|||
а как в SQL Explorer результаты SQL запроса вывести в ексель? делаю там сохранить в файл, а он запрос сам сохраняет мне. В MSSQL сохраняет в файл а здесь нет, MSSQL ставить не хочется
|
#6
|
|||
|
|||
Цитата:
этот запрос натолкнул на мысль, что если я две таблицы запишу в одну, будет 25 тыс записей и выполнить запрос: Код:
SELECT Fio,GR FROM общее1 GROUP BY Fio,GR HAVING Count(*)=1; и получу список как раз тех кто встречается только 1 раз, а не 2 и более и будет примерно та самая оставшаяся 1 тыс людей, которые не попали во вторую таблицу? |
#7
|
||||
|
||||
Что-то я запутался, вам надо получить в итоге список из уникальных записей что-ли? Т.е. убрать повторы? Если так, то:
Код:
delete from Table1 where id in ( SELECT Max(id) FROM Table1 GROUP BY [Фамилия Имя Отчество], ДатаРожд HAVING Count(*)>1) Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#8
|
|||
|
|||
да как бы лучше было бы сранвить две таблицы и вытащить те записи ,которых нет во второй таблице
|
#9
|
|||
|
|||
попробовал этот код, id в таблице нет
|
#10
|
|||
|
|||
может в екселе добавить это поле
|
#11
|
|||
|
|||
добавил в ексель ID и удалил в общем списке двойников (которые не должны были быть в принципе, но были 200 штук)
попытался добавить в список этот тех кто во второй таблице, чтобы удалить получившихся двойников и оставить тех кто не попал во вторую таблицу, но новый список не сохраняется никак почему то ps получилось сделать общую таблицу из 25тыс записей, удаляю двойников скрипт удаляет полностью тех кто встречается 2 и более раз, или оставляет из 2,3 записей одну? Мне тогда нужно чтобы он вообще удалил тех кто дважды и трижды, оставил только тех, кто изначально встречается в таблице однажды после выполнения скрипта осталось из 25 т - 15 т., а надо чтобы около 1 т. осталось, то есть не верный скрипт для меня, видимо он из двух и трех одинаковых оставляет одну запись, а надо чтобы он их вообще грохал ... Последний раз редактировалось letair, 17.10.2009 в 14:13. |
#12
|
||||
|
||||
Ну тогда можно так попробовать:
Код:
delete from Table1 where ([Фамилия Имя Отчество]+ДатаРожд) in ( SELECT ([Фамилия Имя Отчество]+ДатаРожд) FROM Table1 GROUP BY [Фамилия Имя Отчество], ДатаРожд HAVING Count(*)>1) Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#13
|
||||
|
||||
Единственное узкое место, это сцепление ФИО и Д, возможно потребуется предварительное преобразование даты в строку или не + а & надо использовать.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#14
|
|||
|
|||
Цитата:
|
#15
|
|||
|
|||
ошибка Expressions in group by are not supported.
|