Форум программистов, компьютерный форум, киберфорум
Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
6 / 6 / 5
Регистрация: 19.11.2012
Сообщений: 438
1

Найти разницу между двумя таблицами

05.03.2017, 00:11. Просмотров 3306. Ответов 13
Метки нет (Все метки)


Есть две заполненные, почти одинаковые, таблицы(не связаны между собой) и одна пустая. Нужно написать запрос который будет искать будет искать недостающие элементы и записывать их в третью таблицу. В таблице есть столбец с уникальными столбцами.
Пример:
table A
id Name
1 Alex
2 Olga

table B
3 Ivan
1 Alex

table C
2 Olga
3 Ivan


Вот так я ищу эти самые элементы:
SQL
1
SELECT id FROM A WHERE NOT EXISTS(SELECT id FROM B WHERE(B.id = A.id))
Можно ли составить такой запрос, который бы не только искал, но и сразу записывал в таблицу C найденные значения?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2017, 00:11
Ответы с готовыми решениями:

Найти разницу между двумя приведенными запросами
Добрый день. Подскажите, пожалуйста, в чём разница между: select employee.name from employee left...

Связь между двумя таблицами
По работе приходится изучать SQL сервер. С запросами SQL разобрался более или менее, сейчас изучаю...

Триггер между двумя таблицами
Пишу Базу данных для склада (для курсовой). Есть две таблицы: Products и Operations. В первой...

Разность между двумя таблицами
Существует 2 таблицы с такими данными: Как мне вывести данные первой таблицы при этом и первой...

13
1037 / 854 / 334
Регистрация: 08.12.2016
Сообщений: 3,283
05.03.2017, 08:09 2
Цитата Сообщение от qozyrek Посмотреть сообщение
В таблице есть столбец с уникальными столбцами
в какой таблице? какой столбец?

Что должно получиться в ситуации
table A
id Name
1 Alex
3 Olga

table B
3 Ivan
2 Alex
1
1514 / 1079 / 151
Регистрация: 23.07.2010
Сообщений: 5,946
05.03.2017, 12:05 3
сервер данных безусловно военная тайна

Добавлено через 1 минуту
так-то предложение INSERT (как минимум в T-SQL) "умеет" SELECT
1
6 / 6 / 5
Регистрация: 19.11.2012
Сообщений: 438
05.03.2017, 15:25  [ТС] 4
YuryK, должна получится таблица C:
id Name
1 Alex
2 Olga

table B
3 Ivan
1 Alex

table C
2 Olga
3 Ivan


Столбец "id". Но это я для примера привёл. Вот здесь, в папке db лежитит файл с таблицами, с которыми я работаю. Там так же пока три рабочие таблицы. Первая - current_friends, вторая - fresh_friends и третья - b. В таблицу b нужно добавить элементы id которые есть в одной из таблиц, но нет в другой.

Добавлено через 3 минуты
Цитата Сообщение от pincet Посмотреть сообщение
сервер данных безусловно военная тайна
Да нет sqlite юзаю :|
0
1037 / 854 / 334
Регистрация: 08.12.2016
Сообщений: 3,283
05.03.2017, 15:40 5
Цитата Сообщение от qozyrek Посмотреть сообщение
YuryK, должна получится таблица C:
id Name
1 Alex
2 Olga
table B
3 Ivan
1 Alex
table C
2 Olga
3 Ivan
Я задал другие данные, то что из этих должно получиться мне понятно. Но что позволит избежать данные в том виде, что я спросил?
Что делать, если
1) если Name одинаковый, а id-ы разные
2) для одинакового Id в разных таблицах разный Name
1
6 / 6 / 5
Регистрация: 19.11.2012
Сообщений: 438
05.03.2017, 15:50  [ТС] 6
YuryK,
Цитата Сообщение от YuryK Посмотреть сообщение
1) если Name одинаковый, а id-ы разные
Ничего страшного.
Цитата Сообщение от YuryK Посмотреть сообщение
2) для одинакового Id в разных таблицах разный Name
Такое, в принципе, мало вероятно, но даже если и будет, то пока тоже ничего страшного(хотя выглядело б странновато ).

Идея какая?! Раз в час запрашивать в Вк список друзей определённого пользователя, помещать их в таблицу fresh_friends, после искать ту самую разницу между результатами полученными час назад(лежат в current_friends) и записать в таблицу id только id недостающих пользователей. А потом на основании полученной третьей таблицы решить добавили этого человека в список друзей или убавили(удалили).
0
1037 / 854 / 334
Регистрация: 08.12.2016
Сообщений: 3,283
05.03.2017, 15:56 7
Вот теперь яснее стало. Но Id-ы откуда берутся? Из Вк? Или там только Имена, а Id-ы только в вашей базе?
1
6 / 6 / 5
Регистрация: 19.11.2012
Сообщений: 438
05.03.2017, 16:01  [ТС] 8
YuryK, там Вк-шные id-ы.
0
1037 / 854 / 334
Регистрация: 08.12.2016
Сообщений: 3,283
05.03.2017, 16:13 9
это удаленные друзья
SQL
1
2
3
4
5
6
7
SELECT
  cf.*
FROM
  current_friends cf
  LEFT JOIN fresh_friends ff ON cf.Id = ff.Id
WHERE
   ff.Id IS NULL
а это новые
SQL
1
2
3
4
5
6
7
SELECT
  ff.*
FROM
  fresh_friends ff
  LEFT JOIN current_friends cf ON cf.Id = ff.Id
WHERE
   cf.Id IS NULL
1
6 / 6 / 5
Регистрация: 19.11.2012
Сообщений: 438
05.03.2017, 16:45  [ТС] 10
YuryK, ого, даже так
Я в этом деле, как понимаете, тю-тю
Можете помочь адаптировать Ваши запросы под мои таблицы?
База называется friends.
Таблица для записи новых друзей - new_friends
Таблица для удалённых друзей - del_friends
И раз уж это можно сделать одним запросом, то нужно переносить не только значение из столбца id, а из всех столбцов.
Полный перечень столбцов по порядку: id, first_name, last_name, sex, online, city :3
0
1037 / 854 / 334
Регистрация: 08.12.2016
Сообщений: 3,283
05.03.2017, 16:56 11
Лучший ответ Сообщение было отмечено qozyrek как решение

Решение

SQL
1
2
3
4
5
6
7
8
9
INSERT INTO del_friends
SELECT
  cf.*
FROM
  current_friends cf
  LEFT JOIN fresh_friends ff ON cf.Id = ff.Id
  LEFT JOIN del_friends df ON cf.Id = df.Id
WHERE
   ff.Id IS NULL AND df.Id IS NULL
SQL
1
2
3
4
5
6
7
8
9
INSERT INTO new_friends
SELECT
  ff.*
FROM
  fresh_friends ff
  LEFT JOIN current_friends cf ON cf.Id = ff.Id
  LEFT JOIN new_friends nf ON ff.Id = nf.Id
WHERE
   cf.Id IS NULL AND nf.Id IS NULL
1
6 / 6 / 5
Регистрация: 19.11.2012
Сообщений: 438
05.03.2017, 17:36  [ТС] 12
YuryK, спасибо
В sqlite менеджере всё заработало, сейчас буду пробовать добавлять в свой код

Добавлено через 1 минуту
YuryK, а ещё, можно сделать такой запрос, который будет очищать всё, что есть в current_friends и копировать туда всё с fresh_friends?
0
1037 / 854 / 334
Регистрация: 08.12.2016
Сообщений: 3,283
05.03.2017, 17:41 13
SQL
1
2
DELETE FROM current_friends;
INSERT INTO current_friends SELECT * FROM fresh_friends
1
6 / 6 / 5
Регистрация: 19.11.2012
Сообщений: 438
05.03.2017, 17:44  [ТС] 14
YuryK, благодарю :3
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2017, 17:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Посчитать разницу в годах между двумя датами
Встроенный DATEDIFF работает лениво и на SELECT DATEDIFF(year,'21.11.2011','20.11.2012') ответит...

Интеллектуальный перенос данных между двумя таблицами (Merge)
В таблице А содержатся данные по адресным объектам. В контексте вопроса важно сказать, что в этой...

Как получить разницу в днях между двумя датами?
как вычесть из 15 мая 1930 года дату 10 июня 1931 года, результат вывести в днях, help me)

Копирование вложений между двумя таблицами
Доброго времени суток. Возникла проблемка, может, кто подскажет, буду рад. По нажатию кнопки...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.