С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
25 / 0 / 0
Регистрация: 11.12.2019
Сообщений: 232

Сравнить две таблицы и удалить дубликаты

14.03.2023, 11:54. Показов 752. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
добрый день

столкнулся с ситуацией, нужна ваша помощь
есть две таблицы, одинакового формата


нужно сделать сравнение на дубликаты по полю id_SS, если есть совпадение, удалить во второй
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2023, 11:54
Ответы с готовыми решениями:

Сравнить два List(Of String) и удалить дубликаты
Всем привет Помогите с решением вопроса. У меня есть 2 списка List(Of String) bla.Add("123") ...

удалить из таблицы дубликаты
Доброго времени суток. Нужна помощь! задача такова: есть таблица около 15тыс. записей, среди них около 12тыс повторяющихся по 4 полям,...

Удалить дубликаты из таблицы
Таблица выглядит так: BD id|name 1|AA 2|BB 3|CC 4|DD 5|EE 5|EE

8
25 / 0 / 0
Регистрация: 11.12.2019
Сообщений: 232
14.03.2023, 11:59  [ТС]
думаю использоваать вот эту функцию, но может есть сегото по проще?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  function CompareChel(idssLeft, idssRigth: string): Boolean;
  begin
    Result := AnsiSameText(idssLeft, idssRigth)
  end;
 
var
  idssLeft, idssRigth: string;
 
begin
  Form1.FDQuery1.DisableControls;
  Form8.FDQuery1.DisableControls;
  try
    Form1.FDQuery1.First;
    while not Form1.FDQuery1.Eof do
    begin
      idssLeft := AnsiUpperCase(Form1.FDQuery1.FieldByName('id_SS').AsString);
      Form8.FDQuery1.First;
      while not Form8.FDQuery1.Eof do
      begin
        idssRigth := AnsiUpperCase(Form8.FDQuery1.FieldByName('id_SS')
          .AsString);
        if CompareChel(idssLeft, idssRigth) then
        begin
 
          Form8.FDQuery1.delete;
        end;
        Form8.FDQuery1.Next;
      end;
      Form1.FDQuery1.Next;
    end;
  finally
    Form1.FDQuery1.EnableControls;
    Form8.FDQuery1.EnableControls;
  end;
end;
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
14.03.2023, 12:14
Ну тут самым логичным будет выполнить SQL-запрос:
SQL
1
2
DELETE Table2
FROM Table2 AS T2 INNER JOIN Table1 AS T1 ON T2.id_SS=T1.id_SS
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
15.03.2023, 12:23
нужно обязательно указывать к какому серверу применим такой DELETE
этот синтаксис не все сервера поддерживают
но в любом случае можно сконструировать даже на базовом SQL
"удалить записи Table1, у которых существует запись с таким же ID в Table2"
сама проблема шире
если у вас записи в двух таблицах с одинаковыми ID, то это дефект архитектуры
если вы хотите сравнивать не по ID а по целому ряду полей, то ... та же фигня
1
25 / 0 / 0
Регистрация: 11.12.2019
Сообщений: 232
16.03.2023, 11:32  [ТС]
база данных Access
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
16.03.2023, 11:46
Цитата Сообщение от MaryoLunga83 Посмотреть сообщение
база данных Access
Для Акцеса немножко иной синтаксис:
SQL
1
2
DELETE T2.*
FROM Table2 AS T2 INNER JOIN Table1 AS T1 ON T2.id_SS=T1.id_SS
1
25 / 0 / 0
Регистрация: 11.12.2019
Сообщений: 232
16.03.2023, 11:47  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
нужно обязательно указывать к какому серверу применим такой DELETE
этот синтаксис не все сервера поддерживают
но в любом случае можно сконструировать даже на базовом SQL
"удалить записи Table1, у которых существует запись с таким же ID в Table2"
сама проблема шире
если у вас записи в двух таблицах с одинаковыми ID, то это дефект архитектуры
если вы хотите сравнивать не по ID а по целому ряду полей, то ... та же фигня

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

обьясню что это такое:
есть основная таблица получателей помощи, во второй таблице члены семьи, а третья - это доходы которые получают...
и вот если семья из 5 человек, а доходы только у 3-их, то соответственно в таблицу доходов только их и занесут. и это не страшно, только вот при формировании печатной формы о доходах семьи должна быть информация обо всех членах, - тоесть у 1 - есть зарплата, у 2 - тоже зарплата, у 3 - пенсия, а у 4 и 5 - ничего, вот поэтому мне нужно их добавить с признаком "нет дохода"
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
16.03.2023, 11:56
Цитата Сообщение от MaryoLunga83 Посмотреть сообщение
обьясню что это такое:
есть основная таблица получателей помощи, во второй таблице члены семьи, а третья - это доходы которые получают...
и вот если семья из 5 человек, а доходы только у 3-их, то соответственно в таблицу доходов только их и занесут. и это не страшно, только вот при формировании печатной формы о доходах семьи должна быть информация обо всех членах, - тоесть у 1 - есть зарплата, у 2 - тоже зарплата, у 3 - пенсия, а у 4 и 5 - ничего, вот поэтому мне нужно их добавить с признаком "нет дохода"
Зачем же тут что-то удалять? Надо просто сделать запрос с отношением Left join и проверить значение ключа связи на null. Если ключ связи = null тогда выставляется признак "нет дохода" иначе используется значение дохода.

Добавлено через 3 минуты
Вообще конечно лучше это показывать на БД. Прикрепите архив с БД содержащей несколько суррогатных записей в ней.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
16.03.2023, 13:29
собственно о том и речь
с т.з. проектирования сущность ЧЕЛОВЕК должна быть в одной таблице
в таблице доходов достаточно иметь ссылки на первую таблицу
и соответственно получать нужные данные с помошью JOIN как уже сказали выше
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.03.2023, 13:29
Помогаю со студенческими работами здесь

Как из таблицы удалить дубликаты?
Как из таблицы удалить дубликаты? Как выбрать знаю "SELECT DISTINCT" , а вот как удалить? Подскажите пожалуйста Добавлено через 23...

Сравнить две таблицы и если айдишник из первой таблицы совпадает во второй вывести эту строку
Сравнить две таблицы и если айдишник из первой таблицы совпадает во второй вывести эту строку Это первая таблица и вот если у столбца...

Сравнить две таблицы и заполнить в третьей таблицы
Привет всем, скажите как из тех 2 таблицы заполнить в третью таблицу.. В первом таблице(ТП) есть таблица Группа и Бренд, во втором...

Необходимо удалить из таблицы дубликаты name кроме тех у которых минимальный id
Добрый вечер, господа эскуэльщики! Не поможете помощь? Тут есть таблица такая: CREATE TABLE IF NOT EXISTS `table` ( `id`...

Сравнить две таблицы
Необходимо сравнить две таблички, в первом листе в одном столбике неповторяющееся номера, а в следующих трех столбах цены, которые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru