Сравнение двух таблиц
Необходимо сравнить 2 таблицы, в 1-й таблице больше записей чем во 2-м, но и во второй таблице есть id-шники которые нет в первой таблице Вообщем необходимо определить разницу вывести null показать разницу и написать в колонке типа есть различие
Отслеживать
задан 19 авг 2015 в 5:21
1,217 1 1 золотой знак 14 14 серебряных знаков 26 26 бронзовых знаков
Чтобы задать хороший вопрос про SQL, используйте эту инструкцию.
19 авг 2015 в 8:31
Воспользуйтесь моим ответом: table1.id = ob.esbd_id table1 = [dbo].[ogpo_branch] table2 = [dbo].[Филиалы Цесна Гарант$] f table2.id = f.[Код регионального подразделения ЕСБД — ID] И тогда запрос выглядит: SELECT ob.esbd_id, f.[Код регионального подразделения ЕСБД — ID] from [dbo].[ogpo_branch] FULL OUTER JOIN [dbo].[Филиалы Цесна Гарант$] f ON ob.esbd_id = f.[Код регионального подразделения ЕСБД — ID] WHERE ob.esbd_id IS NULL OR f.[Код регионального подразделения ЕСБД — ID] IS NULL;
Как сравнить две таблицы sql
Для работы с данными из нескольких таблиц можете попробовать следующие варианты.
Оператор JOIN используется для объединения двух таблиц по определенному условию, например, по ключевому полю. Следующий запрос объединяет две таблицы table1 и table2 по столбцу id и выбирает все строки, где значения в столбцах column1 и column2 совпадают:
Оператор EXCEPT используется для вычитания одной таблицы из другой. Следующий запрос выбирает все строки из таблицы table1 , которых нет в таблице table2 :
Еще есть оператор UNION для объединения строк из двух таблиц, но это не сравнение таблиц, а скорее склейка данных из них.
Сравнение двух таблиц с целью выявления записей без соответствия
Иногда требуется сравнить две таблицы и выявить в одной из них записи, которые не имеют соответствующих записей в другой таблице. Эти записи проще всего найти с помощью мастера запросов на поиск записей, не имеющих подчиненных. Когда мастер сформирует ваш запрос, его структуру можно будет изменить, добавив или удалив поля либо добавив объединения между двумя таблицами (чтобы указать поля, значения которых должны совпадать). Вы также можете создать запрос на поиск записей, не имеющих подчиненных, самостоятельно, не прибегая к помощи мастера.
В этой статье описывается, как запустить мастер запросов на поиск записей, не имеющих подчиненных, как изменить результаты работы этого мастера и как создать такой запрос самостоятельно.
В этой статье
- Когда следует выполнять поиск записей, не имеющих подчиненных
- Использование мастера для сравнения двух таблиц
- Создание и изменение запроса для сравнения по нескольким полям
- Создание собственного запроса на поиск записей, не имеющих подчиненных
Когда следует выполнять поиск записей, не имеющих подчиненных
Ниже описаны две распространенные ситуации, в которых может потребоваться сравнить две таблицы и найти записи, не имеющие подчиненных. В зависимости от ситуации поиск записей, не имеющих подчиненных, может стать первым из нескольких требуемых шагов. В этой статье рассматривается только поиск таких записей.
- Одна таблица используется для хранения данных об объектах (например, товарах), а другая таблица — для хранения данных о действиях (например, заказах) в отношении эти объектов. Например, в шаблоне базы данных «Борей» данные о товарах хранятся в таблице «Товары», а данные о том, какие товары включены в тот или иной заказ — в таблице «Сведения о заказе». Поскольку (в соответствии со структурой) данные о заказах отсутствуют в таблице «Товары», невозможно только на основе данных таблицы «Товары» определить, какие товары никогда не продавались. Эти сведения также нельзя получить только на основе данных таблицы «Сведения о заказе», поскольку эта таблица содержит только данные о товарах, по которым были продажи. Необходимо сравнить эти две таблицы, чтобы определить, какие товары никогда не продавались. Если нужно получить список объектов из первой таблицы, по которым не содержится соответствующих действий во второй таблице, можно воспользоваться мастером запросов на поиск записей, не имеющих подчиненных.
- Есть две таблицы, которые содержат пересекающиеся, избыточные или противоречивые данные, и требуется консолидировать эти таблицы в одну. Предположим, например, что есть две таблицы, которые называются «Заказчики» и «Клиенты». Таблицы практически совпадают, но в одной или обеих из них есть записи, отсутствующие в другой таблице. Перед тем как объединять таблицы, нужно определить, какие записи в них являются уникальными. Если вы оказались в подобной ситуации, рассмотренные в статье способы помогут решить эту задачу, однако потребуется предпринять ряд дополнительных шагов. Можно запустить мастер запросов на поиск записей, не имеющих подчиненных, чтобы выявить записи без соответствия, однако для извлечения объединенного набора записей следует использовать эти результаты для создания запроса на объединение. Если вы хорошо знакомы с инструкциями SQL, можете пропустить поиск записей, не имеющих подчиненных, и создать запрос на объединение вручную. Часто с помощью поиска повторяющихся данных в двух или нескольких таблицах можно решить проблему пересечения, избыточности или противоречивости данных.
Дополнительные сведения о создании запросов на объединение, а также о поиске, скрытии и удалении повторяющихся данных см. в статьях, ссылки на которые приведены в разделе См. также.
Примечание: В примерах, которые описываются в этой статье, используется база данных, созданная с использованием шаблона базы данных «Борей».
Инструкции по настройке базы данных «Борей»
- На вкладке Файл нажмите кнопку Создать.
- В зависимости от используемой версии Access поиск базы данных «Борей» можно выполнить в поле «Поиск» либо в области слева (в разделе Категории шаблонов выберите пункт Локальные шаблоны).
- В разделе Локальные шаблоны выберите шаблон Борей 2007 и нажмите кнопку Создать.
- Следуйте инструкциям на странице Борей (на вкладке объектов Заставка), чтобы открыть базу данных, а затем закройте окно входа.
Использование мастера для сравнения двух таблиц
- На вкладке Создание в группе Запросы нажмите кнопку Мастер запросов.
- В диалоговом окне Новый запрос дважды щелкните пункт Поиск записей, не имеющих подчиненных.
- На первой странице мастера выберите таблицу, которая содержит записи, не имеющие подчиненных, а затем нажмите кнопку Далее. Например, если требуется просмотреть список товаров компании «Борей», которые никогда не продавались, выберите таблицу «Товары».

- На второй странице выберите связанную таблицу и нажмите кнопку Далее. В нашем примере нужно выбрать таблицу «Сведения о заказе».

- На третьей странице выберите поля, связывающие таблицу, нажмите , а затем нажмите кнопку Далее. Можно выбрать только одно поле из каждой таблицы. В нашем примере нужно выбрать поле «ИД» из таблицы «Товары» и поле «ИД товара» из таблицы «Сведения о заказе». Убедитесь в том, что сопоставлены нужные поля, просмотрев поле Соответствующие поля.
Обратите внимание на то, что поля «ИД» и «ИД товара» могут быть уже выбраны из-за существующих отношений, встроенных в шаблон. - На четвертой странице дважды щелкните нужные поля из первой таблицы, а затем нажмите кнопку Далее. Например, выберите поля «ИД» и «Наименование».

- На пятой странице можно просмотреть результаты или изменить структуру запроса. Нажмите кнопку Просмотреть результаты запроса. Примите предложенное имя запроса и нажмите кнопку Готово.
Вы можете изменить оформление запроса, добавить другие условия, изменить порядок сортировки, а также добавить или удалить поля. Сведения об изменении запроса на поиск неохимяющих данных можно найти в следующем разделе: дополнительные сведения о создании и изменении запросов см. по ссылкам в разделе «См. также».
Создание и изменение запроса для сравнения по нескольким полям
- На вкладке Создание в группе Запросы нажмите кнопку Мастер запросов.
- В диалоговом окне Новый запрос дважды щелкните пункт Поиск записей, не имеющих подчиненных.
- На первой странице мастера выберите таблицу, которая содержит записи, не имеющие подчиненных, а затем нажмите кнопку Далее. Например, если требуется просмотреть список товаров компании «Борей», которые никогда не продавались, выберите таблицу «Товары».
- На второй странице выберите связанную таблицу и нажмите кнопку Далее. В нашем примере нужно выбрать таблицу «Сведения о заказе».
- На третьей странице выберите поля, связывающие таблицы, щелкните значок , а затем нажмите кнопку Далее. Можно выбрать только одно поле из каждой таблицы. В нашем примере нужно выбрать поле «ИД» из таблицы «Товары» и поле «ИД товара» из таблицы «Сведения о заказе». Убедитесь, что сопоставляются нужные поля, просмотрев текст в поле Соответствующие поля. Остальные поля можно объединить после завершения работы мастера. Обратите внимание на то, что поля «ИД» и «ИД товара» могут быть уже выбраны из-за существующих отношений, встроенных в шаблон.
- На четвертой странице дважды щелкните нужные поля из первой таблицы, а затем нажмите кнопку Далее. Например, выберите поля «ИД» и «Наименование».
- На пятой странице выберите параметр Изменить структуру запроса и нажмите кнопку Готово. Запрос откроется в режиме конструктора.
- Обратите внимание, что в бланке запроса две таблицы объединены по полям, указанным на третьей странице мастера (в нашем примере это поля «ИД» и «ИД товара»). Создайте объединение для каждой оставшейся пары связанных полей, перетащив их из первой таблицы (то есть таблицы, которая содержит записи, не имеющие подчиненных) во вторую таблицу. В нашем примере необходимо перетащить поле «Цена по прейскуранту» из таблицы «Товары» на поле «Цена за единицу» таблицы «Сведения о заказе».
- Дважды щелкните соединение (линию, соединяющую поля), чтобы отобразить диалоговое окно «Свойства соединения». Для каждого присоединиться выберите параметр, который включает все записи из таблицы «Товары», и нажмите кнопку «ОК». В бланке запроса на конце каждой линии объединения появится стрелка. 1. При создании объединения между полями «Цена по прейскуранту» и «Цена за единицу» ограничивается вывод данных из обоих таблиц. В результаты запроса включаются только записи с совпадающими данными в полях обеих таблиц. 2. После изменения свойств объединения будет ограничена только таблица, на которую указывает стрелка. Все записи в другой таблице включаются в результаты поиска.
Примечание: Убедитесь, что все стрелки объединений имеют одинаковое направление.
Создание собственного запроса для поиска записей, не имеющих подчиненных
- На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.
- Дважды щелкните таблицу, которая имеет записи, не относящиеся к записям, а затем дважды щелкните таблицу со связанными записями.
- В бланке запроса между связанными полями должны быть линии объединения. Если они отсутствуют, создайте их, перетащив каждое связанное поле из первой таблицы (таблицы с записями, не имеющими подчиненных) во вторую (таблицу со связанными записями).
- Дважды щелкните соединитель, чтобы открыть диалоговое окно «Свойства для join». Для каждого присоединиться выберите вариант 2 и нажмите кнопку «ОК». В бланке запроса на конце каждой линии объединения появится стрелка.
Примечание: Убедитесь, что все объединия имеют одинаковое направление. Запрос не будет запускаться, если точка соединяется в другом направлении, и не будет запускаться, если хотя бы один из них не является стрелкой. Они должны отойти от таблицы, в которую не были записи.
Сравнить две таблицы в MySQL
В этой статье вы узнаете, как сравнивать две таблицы, чтобы найти несопоставимые записи.
При переносе данных нам часто приходится сравнивать две таблицы, чтобы определить запись в одной таблице, у которой нет соответствующей записи в другой таблице.
Например, у нас есть новая база данных, схема которой отличается от устаревшей базы данных. Наша задача — перенести все данные из устаревшей базы данных в новую и убедиться, что данные были перенесены правильно.
Чтобы проверить данные, нам нужно сравнить две таблицы, одну в новой базе данных и одну в устаревшей базе данных, и идентифицировать несопоставленные записи.
Предположим, у нас есть две таблицы: my_table и you_table. Следующие шаги сравнивают две таблицы и идентифицируют несопоставленные записи:
Во-первых, используйте оператор UNION для объединения строк в обеих таблицах; включать только столбцы, которые нужно сравнить. Возвращенный набор результатов используется для сравнения.
SELECT my_table.pk, my_table.c1 FROM my_table UNION ALL SELECT you_table.pk, you_table.c1 FROM you_table
Во-вторых, сгруппируйте записи на основе первичного ключа и столбцов, которые необходимо сравнить. Если значения в столбцах, которые необходимо сравнить, идентичны, COUNT(*) возвращается 2, в противном случае COUNT(*) возвращается 1.
Смотрите следующий запрос:
SELECT pk, c1 FROM ( SELECT my_table.pk, my_table.c1 FROM my_table UNION ALL SELECT you_table.pk, you_table.c1 FROM you_table ) t GROUP BY pk, c1 HAVING COUNT(*) = 1 ORDER BY pk
Если значения в столбцах, участвующих в сравнении, идентичны, строка не возвращается.
Пример сравнения двух таблиц в MySQL
Давайте посмотрим на пример, который имитирует шаги выше.
Сначала создайте 2 таблицы с похожей структурой:
CREATE TABLE my_table( id int auto_increment primary key, title varchar(255) ); CREATE TABLE you_table( id int auto_increment primary key, title varchar(255), note varchar(255) );
Во-вторых, вставьте некоторые данные в таблицы my_table и you_table:
INSERT INTO my_table(title) VALUES('row 1'),('row 2'),('row 3'); INSERT INTO you_table(title,note) SELECT title, 'data migration' FROM my_table;
Читать Установка Lighttpd, PHP 7 и MySQL в Debian 9
В-третьих, сравните значения id и столбца title обеих таблиц:
SELECT id,title FROM ( SELECT id, title FROM my_table UNION ALL SELECT id,title FROM you_table ) tbl GROUP BY id, title HAVING count(*) = 1 ORDER BY id;
Возвращенных строк не будет, потому что нет несоответствующих записей.
В-четвертых, вставьте новую строку в таблицу you_table:
INSERT INTO you_table(title,note) VALUES('new row 4','new');
В-пятых, выполните запрос, чтобы снова сравнить значения столбца заголовка в обеих таблицах. Новая строка, которая является несопоставленной строкой, должна вернуться.
В этой статье вы узнали, как сравнивать две таблицы на основе определенных столбцов, чтобы найти несопоставленные записи.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
